总结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]
总结
好了,以上就是这篇文章的全部内容了,个人比较喜欢使用方法一,不会对原数组进行修改,希望这篇文章对大家能有所帮助,如果有疑问大家可以留言交流。