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