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

上一篇:JavaScript面向对象旅程(下)


下一篇:MyString