总结Javascript中数组各种去重的方法
前言
在做javascript开发的时候,经常会遇到数组元素重复的问题,而javascriptArray又没有直接提供方法解决此问题,还需要自己去实现。这篇文章总结了Javascript中数组各种去重的方法,下面来一起看看。
方法一利用对象属性不重复的特性
Array.prototype.distinct=function(){
vararr=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]);
}
}
returnresult;
};
方法二双层循环,外层循环元素,内层循环时比较值
Array.prototype.distinct=function(){
vararr=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]);
}
returnresult;
}
方法三数组递归去重
Array.prototype.distinct=function(){
vararr=this,
len=arr.length;
arr.sort(function(a,b){//对数组进行排序才能方便比较
returna-b;
})
functionloop(index){
if(index>=1){
if(arr[index]===arr[index-1]){
arr.splice(index,1);
}
loop(index-1);//递归loop函数进行去重
}
}
loop(len-1);
returnarr;
};
方法四利用indexOf以及forEach
Array.prototype.distinct=function(){
vararr=this,
result=[],
len=arr.length;
arr.forEach(function(v,i,arr){//这里利用map,filter方法也可以实现
varbool=arr.indexOf(v,i+1);//从传入参数的下一个索引值开始寻找是否存在重复
if(bool===-1){
result.push(v);
}
})
returnresult;
};
方法五利用ES6的set
functiondedupe(array){
returnArray.from(newSet(array));
}
dedupe([1,1,2,3])//[1,2,3]
方法六拓展运算符(…)内部使用for…of循环
letarr=[3,5,2,2,5,5]; letunique=[...newSet(arr)];//[3,5,2]
总结
好了,以上就是这篇文章的全部内容了,个人比较喜欢使用方法一,不会对原数组进行修改,希望这篇文章对大家能有所帮助,如果有疑问大家可以留言交流。