亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

如何去掉一個數組重復的元素

如何把一個數組的重復元素去掉

正在回答

4 回答

常規思路:循環和 hash

循環的方法:思路就是:把數組元素搬運到另一數組,搬運過程中檢查 元素是否重復,如有,丟棄,沒有,加入。

方法一:雖然是循環,但是效率還可以。思路是 把一個數組搬運到另一新數組,比較 要搬運的數組元素 與 新數組元素的最后一個,看是否相同。

Array.prototype.delRepeat1=function(){
//先排序,因為這個方法只是對比?兩個元素,n的最后一個元素?與?this[i]
????this.sort();
????var?n=[this[0]];
????for(var?i=1;i<this.length;i++){
????//注意JS是若類型語言,避免?123?與?"123"?判斷為相等,所以此處用?!==
?????????if(this[i]!==?n[n.length?-1])?{
?????????//這一句?用?n[n.length]不行的,原因,我也不知道,希望以后探討?。?!
?????????????n.push(this[i]);
?????????}?
????}
????return?n;
}

方法二:還是循環,這個效率低,因為indexOf()會從頭檢查數組元素,效率不行

具體思路差不多,復制數組時 進行比較,檢查新數組中是否存在 要插入的那個數組元素

Array.prototype.delRepeat2=function(){
//一個新的臨時數組
????var?n=[];
????for(var?i=0;i<this.length;i++){
????//?-1?表示n中沒有此元素,則把this[i]加入n中
????????if(n.indexOf(this[i])==-1)
????????????n.push(this[i]);
????}
????return?n;
}

方法三:用indexOf()的另一種方法

Array.prototype.delRepeat3=function(){
????var?n=this[0];
????//對原有數組判斷,如果第一次出現的位置與序列號相同,則沒有重復,否則有重復
????for(var?i=1;i<this.length;i++){
????????if(this.indexOf(this[i])==i)?{
?????????????n.push(this[i]);
?????????}
????}
????return?n;
}

方法四 hash 這個方法看起來會高級一點

Array.prototype.delRepeate4?=?function(){
//n為hash表,r為臨時數組
????var?n={},r=[];
????for(var?i=0;i<this.length;i++){
????//如果hash表中沒有當前項
????????if(!n[this[i]]){
????????//存入hash表中
????????????n[this[i]]?=true;
????????????//把當前數組的當前項push到臨時數組中
????????????r.push(this[i]);
????????}
????}
????return?r;
}


0 回復 有任何疑惑可以回復我~
#1

咸魚有夢

更改一下 用 n[n.length] 是可以的,當時在測試時寫錯了,后來證明是可以的
2016-05-13 回復 有任何疑惑可以回復我~
var result = [], isRepeated;
? ? ?for (var i = 0; i < arr.length; i++) {
? ? ? ? ?isRepeated = false;
? ? ? ? ?for (var j = 0; j < result.length; j++) {
? ? ? ? ? ? ?if (arr[i] == result[j]) { ?
? ? ? ? ? ? ? ? ?isRepeated = true;
? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ?}
? ? ? ? }
? ? ? ? if (!isRepeated) {
? ? ? ? ? ? result.push(arr[i]);
? ? ? ? }
? ? }


0 回復 有任何疑惑可以回復我~

for(var i=0; i<arr.length; i++){

? ? for(var j=i+1; j<arr.length; j++){

? ? ? ? if(arr[i]==arr[j]){

? ? ? ? ? ?arr.splice(j,1);

? ? ? ? ? ?j--;

? ? ? ? } ??

? ? }

}


0 回復 有任何疑惑可以回復我~

var arr = ["1","2", "3","4","5","2","3","8","9","10","11"]
var.length;
var num=[];
for(var i=0; i<lang; i++){
??? for(var j=i+1; j<lang; j++){
??????? if(arr[i]==arr[j]){
??????????? num.push(j)
??????? }? ?
??? }
}
for(var i=num.length-1; i>=0; i--){
?? ?arr.splice(num[i],1)
}

感覺應該還有更簡便的方法.- -。我是新手-只能寫到這..

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
JavaScript進階篇
  • 參與學習       468832    人
  • 解答問題       22582    個

本課程從如何插入JS代碼開始,帶您進入網頁動態交互世界

進入課程

如何去掉一個數組重復的元素

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號