JS下的6种数组去重方式

发布时间:2019-08-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了JS下的6种数组去重方式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

方法一:

function deRepeated(arr){//传入要去重的目标数组
         var newArr=[];
         for(var i=0;i<arr.length;i++){

         //遍历目标数组各项,新数组中尚不存在的就把它存入新数组
            if(newArr.indexOf(arr[i]) == -1){
                newArr.push(arr[i]);
            }

         }
         return newArr;//返回去重后的新数组
}
deRepeated([2,3,2,32,43,32,8,3,9,76,43,43,3,8,3]);//[2,3,32,43,8,9,76]

方法二:

function deRepeated(arr){
        var newArr=[];
        for(var i=0;i<arr.length;i++){

  //遍历目标数组各项,返回第一次出现的位置是i,说明不是重复项,存入新数组
              if(arr.indexOf(arr[i]) == i){
                    newArr.push(arr[i]);
              }

        }
        return newArr;
}
deRepeated([2,3,2,32,43,32,8,3,9,76,43,43,3,8,3])//[2,3,32,43,8,9,76]

方法三:

      由于方法一和方法二都用到了ES5的indexOf()方法,有些浏览器可能不兼容。还可采用方法三:先对目标数组重排序,排序后重复项相邻,然后遍历目标数组。当排序后目标数组的项不是新数组的最后一项时,说明不是重复项,推入新数组。

function deRepeated(arr){
            var newArr=[];
            arr.sort();
            for(var i=0;i<arr.length;i++){
            
                //遍历目标数组,第i项和新数组末项比较
                if(arr[i] !== newArr[newArr.length-1]){
                    newArr.push(arr[i]);//推入新数组末端
                }

            }
            return newArr;
        }
 deRepeated([2,3,2,32,43,32,8,3,9,76,43,43,3,8,3]);//[2,3,32,43,76,8,9]  

注意点:由于涉及到直接比较数组的项,所以应采用不全等方式"!==";  
缺点:由于对目标数组进行先排序后去重,因此返回的也是排序后的新数组。


方法四:

      原理是遍历目标数组各项,保存为对象属性并统一给其设置属性值1,给重复的属性设置值时会覆盖原来的,然后遍历对象属性,由于返回的是字符串形式,应转为数字后再存入新数组。

function deRepeated(arr){
            var obj={},
                newArr=[];
            for(var i=0;i<arr.length;i++){
                obj[arr[i]]=1; //给对象添加属性
            }
            for(var j in obj){  //遍历对象属性
                newArr.push(parseInt(j));
            }
            return newArr;
}
deRepeated([2,3,2,32,43,32,8,3,9,76,43,43,3,8,3]);//[2,3,8,9,32,43,76]

方法五:  

      在stackoverflow上看到了这种针对数组中为纯数字时的排序去重方法。

function deRepeated(arr){
         arr.sort(function(a,b){  //对目标数组重排序,使有重复项的相邻
                  return a-b; 
         })
         var newArr=[arr[0]]; //第一项先放入新数组中
         for(var i=1;i<arr.length;i++){
                  if(arr[i-1] !== arr[i]){ //迭代相邻项,找到不同项时才推入新数组
                           newArr.push(arr[i]);
                  }
         }
         return newArr;
}
console.log(deRepeated([2,3,8,2,3,43,8,43,2,5,3])); //[2,3,5,8,43]  

方法六:  

      利用ES6新增的对象内置类型Set,利用其元素不重复的特点,在实例内部实现自动去重。  

function deRepeated(arr){
         var set=new Set(arr);

         arr.splice(0);
         arr.push(...set); 
         return arr;   //返回原数组

         //return new Array(...set);   //返回新数组
}
var arr=[2,3,6,4,7,3,5,4,4,4];
console.log(deRepeated(arr));   //[2,3,6,4,7,5]

脚本宝典总结

以上是脚本宝典为你收集整理的JS下的6种数组去重方式全部内容,希望文章能够帮你解决JS下的6种数组去重方式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:es6