數組去重方法總結

總結下javascript中常見的數組去重方法,面試中也常常會遇到這個問題。引伸的還有合併數組並去重。javascript

方法一:遍歷數組

思路:新建一數組,遍歷傳入數組,若元素不在新數組中就添加到新數組中。java

注意:判斷值是否在數組的方法「indexOf」是ECMAScript5方法,IE8如下不支持,需多寫兼容低版本瀏覽器代碼。 面試

 1 //判斷瀏覽器是否支持indexOf方法
 2      if(!Array.prototype.indexOf){
 3          //新增indexOf方法
 4          Array.prototype.indexOf = function(item){
 5              var result = -1,
 6                  arr_item = null;
 7              if(this.length == 0) {
 8                  return result;
 9              }
10              for(var i=0,len=this.length; i<len; i++){
11                  arr_item = this[i];
12                  if(arr_item === item){
13                      result = i;
14                      break; 
15                  }
16              }
17              return result;
18          };
19      }
20     

 

 

1 function unique1(arr){
2     var newArr = [];//新建一個數組
3     for(var i=0,len=arr.length;i<len;i++){
4         if(newArr.indexOf(arr[i]) == -1){//若新數組中未包含該項則將其存入新數組
5          newArr.push(arr[i]);
6      }
7     }
8     return newArr;
9 }    

方法二:數組下標去重法

思路:若是當前數組的第i項在當前數組中第一次出現的位置不是i,那麼表示第i項是重複的,忽略掉。不然存入結果數組。數組

注意:此方法也用到了「indexOf」方法。瀏覽器

1 function unique2(arr){
2     var newArr = [];
3     for(var i=0, len=arr.length; i<len; i++){
4          if(arr.indexOf(arr[i]) == i){
5              newArr.push(arr[i]);
6          }
7      }
8      return newArr;
9 }

方法三:排序後相鄰去重法

思路:將傳入的數組進行排序,相同的元素就會相鄰。再遍歷數組,將元素與新數組的最後一個值進行比較,若不一樣則加入新數組。app

 1 function unique3(arr){
 2      arr.sort();
 3      var newArr = [arr[0]];
 4      for(var i=1, len=arr.length; i<len; i++){
 5          if(arr[i] !== newArr[newArr.length-1]){
 6              newArr.push(arr[i]);
 7             }
 8      }
 9      return newArr;
10 }

方法四:優化遍歷數組法

思路:遍歷傳入的數組,元素與右邊的元素依次比較,若元素有重複,則結束當前的元素比較,將下一個元素當作比較對象,即跳出內層循環。優化

 1 function unique4(arr){
 2      var newArr = [];
 3      for(var i=0,len=arr.length; i<len;i++){
 4          for(var j=i+1;j<len;j++){
 5              if(arr[i] === arr[j]){//獲取沒重複的最右一值放入新數組
 6                  ++i;
 7              }                 
 8          }
 9          newArr.push(arr[i]);
10      }
11      return newArr;
12 }

引伸:合併數組並去重

1、concat()方法

思路:concat() 方法將傳入的數組或非數組值與原數組合並,組成一個新的數組並返回。該方法會產生一個新的數組。this

function concatArr(arr1, arr2){
    var arr = arr1.concat(arr2);
    arr = unique1(arr);//再引用上面的任意一個去重方法
    return arr;
}

2、Array.prototype.push.apply()

思路:該方法優勢是不會產生一個新的數組。spa

1 var a = [1, 2, 3];
2 var b = [4, 5, 6];
3 
4 Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6]
5 //等效於:a.push.apply(a, b);
6 //也等效於[].push.apply(a, b); 
1 function concatArray(arr1,arr2){
2     Array.prototype.push.apply(arr1, arr2);
3     arr1 = unique1(arr1);
4     return arr1;
5 }
相關文章
相關標籤/搜索