1. 程式人生 > >幾種常用的js陣列去重方法

幾種常用的js陣列去重方法

Array.prototype.distinct = function(){
 var arr = this,
  result = [],
  i,
  j,
  len = arr.length;
 for(i = 0; i < len; i++){
  for(j = i + 1; j < len; j++){
   if(arr[i] === arr[j]){
    j = ++i;
   }
  }
  result.push(arr[i]);
 }
 return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];

arra.distinct(); //返回[3,4,2,1]

方法二:利用物件的屬性不能相同的特點進行去重

Array.prototype.distinct = function (){
 var arr = this,
  i,
  obj = {},
  result = [],
  len = arr.length;
 for(i = 0; i< arr.length; i++){
  if(!obj[arr[i]]){ //如果能查詢到,證明陣列元素重複了
   obj[arr[i]] = 1;
   result.push(arr[i]);
  }
 }
 return result;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

方法三:利用ES6的set

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]
方法四:使用indexOf
var arr1 =[1,2,2,2,3,3,3,4
,5,6],
    arr2 = [];for(var i =0,len =arr1.length; i< len; i++){
if(arr2.indexOf(arr1[i]) <0){
arr2.push(arr1[i]);
}}document.write(arr2);// 1,2,3,4,5,6