去重方法小結

1.最基本的去重方法

思路:定義一個新數組,並存放原數組的第一個元素,然後將元素組一一和新數組的元素對比,若不同則存放在新數組中。

function unique(arr){

  var res = [arr[0]];

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

    var repeat = false;

    for(var j=0;j<res.length;j++){

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

        repeat = true;

        break;

      }

    }

    if(!repeat){

      res.push(arr[i]);

    }

  }

  return res;

}

2.先排序在去重
思路:先將原數組排序,在與相鄰的進行比較,如果不同則存入新數組

function unique(arr){

  var arr2 = arr.sort();

  var res = [arr2[0]];

  for(var i=1;i<arr2.length;i++){

    if(arr2[i] !== res[res.length-1]){

      res.push(arr2[i]);

    }

  }

  return res;

}

3.利用對象的屬性去重(推薦)
思路:每次取出原數組的元素,然後再對象中訪問這個屬性,如果存在就說明重複

function unique(arr){

  var res =[];

  var json = {};

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

    if(!json[arr[i]]){

      res.push(arr[i]);

      json[arr[i]] = 1;

    }

  }

  return res;

}


4.利用下標查詢

function unique(arr){
     var newArr = [arr[0]];
     for(var i=1;i<arr.length;i++){
    if(newArr.indexOf(arr[i]) == -1){
             newArr.push(arr[i]);
        }
        }
        return newArr;
   }


5.利用es6

  • Set數據結構,它類似於數組,其成員的值都是唯一的。

    利用Array.from將Set結構轉換成數組

function dedupe(array){
 return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]

拓展運算符(...)內部使用for...of循環

let arr = [1,2,3,3];
let resultarr = [...new Set(arr)]; 
console.log(resultarr); //[1,2,3]

6.concat()方法

思路:concat() 方法將傳入的數組或非數組值與原數組合並,組成一個新的數組並返回。該方法會產生一個新的數組。
 function concatArr(arr1, arr2){
      var arr = arr1.concat(arr2);
      arr = unique1(arr);//再引用上面的任意一個去重方法
      return arr;
    }

7.Array.prototype.push.apply()

思路:該方法優點是不會產生一個新的數組。
var a = [1, 2, 3];
var b = [4, 5, 6];

Array.prototype.push.apply(a, b);//a=[1,2,3,4,5,6]

//等效於:a.push.apply(a, b);
//也等效於[].push.apply(a, b); 

function concatArray(arr1,arr2){
  Array.prototype.push.apply(arr1, arr2);
  arr1 = unique1(arr1);
  return arr1;
}


8.arr.filter()

var arr = [0,0,1,'a',1,2,'b','a','a'];
var res = arr.filter(function(ele,index,array){
    return index === array.indexOf(ele);
});
document.write(res);




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章