1. 程式人生 > >JS實現陣列去重方法總結(三種常用方法)

JS實現陣列去重方法總結(三種常用方法)

方法一:

雙層迴圈,外層迴圈元素,內層迴圈時比較值

如果有相同的值則跳過,不相同則push進陣列

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]

方法二:利用splice直接在原陣列進行操作

雙層迴圈,外層迴圈元素,內層迴圈時比較值

值相同時,則刪去這個值

注意點:刪除元素之後,需要將陣列的長度也減1.

Array.prototype.distinct = function (){

 var arr = this,i,j,len = arr.length;

 for(i = 0; i < len; i++){

 for(j = i + 1; j < len; j++){

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

    arr.splice(j,1);

    len--;

    j--;

   }

 }

 }

 return arr;

};

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

優點:簡單易懂

缺點:佔用記憶體高,速度慢

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

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