数组去重(es5,es6)

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

const arr = [1,2,"1",null,null,undefined,undefined,false,false,NaN,NaN];

1.0 遍历 无法判断NaN
//for循环去重,效率较高
const unique1 = (arr)=>{
  const newArr = [];
  let item;
  for (let i = 0 , len = arr.length ; i < len; i++) {
    item = arr[i];
    if(newArr.indexOf(item) === -1){
      newArr.push(item);
    }
  }
  return newArr;
}
console.log('遍历:unique1',unique1(arr));//[1, 2, null, false, NaN, NaN]

//forEach  效率不如for,判断不出NaN
const unique2 = (arr)=>{
  const newArr = [];
  arr.forEach(item=>{
    if(newArr.indexOf(item) === -1){
      newArr.push(item);
    }
  })
  return newArr;
}
console.log('遍历:unique2',unique2(arr));//[1, 2, null, false, NaN, NaN]

//reduce
const unique3 = (arr)=>{
  return arr.reduce((pre,next)=>{
    if(pre.indexOf(next) === -1){
      pre.push(next)
    };
    return pre;
  },[])
}
console.log('遍历:unique3',unique3(arr));// [1, 2, null, false, NaN, NaN]
//解决NaN无法排除问题
const unique1_1 = (arr)=>{
  const newArr = [];
  let item;
  let flag = true;
  for (let i = 0 , len = arr.length ; i < len; i++) {
    item = arr[i];
    if(newArr.indexOf(item) === -1){
      if(item != item){ //排除NaN
        if(flag){
          newArr.push(item);
          flag = false;
        }
      }else {
        newArr.push(item);
      }
    }
  }
  return newArr;
}

console.log('解决NaN问题:unique1_1',unique1_1(arr));//[1, 2, null, false, NaN]
2.0 索引去重 把NaN直接全部去除掉了
//2.1for
 const unique4 = (arr)=>{
   const newArr = [];
   let item;
   for (let i = 0 , len = arr.length; i < len; i++) {
     item = arr[i];
     if(arr.indexOf(item) === i){
       newArr.push(item);
     }
   }
   return newArr;
 }
 console.log('索引去重:unique4',unique4(arr));//[1, 2, null, false]


//2.2filter
const unique5 = (arr)=>{
  return arr.filter((item,index,arr)=>arr.indexOf(item) === index)
}
console.log('索引去重:unique4',unique5(arr));//[1, 2, null, false]
3.0集合转换 效率低,能去掉重复NaN;
//Set
const unique6 = (arr)=>{
  return Array.from(new Set(arr));
}
console.log('集合转换:unique6',unique6(arr));



挂载方法到Array
const unique = function(){
  return Array.from(new Set(this));
}
Array.prototyPE.unique = unique;
const uniqueArr = arr.unique();

总结: 遍历无法判断NaN需要手动判断,for效率最高;索引去重直接把所有NaN干掉了,看情况使用;Set去重简单、能去掉NaN,但是效率最低;

脚本宝典总结

以上是脚本宝典为你收集整理的数组去重(es5,es6)全部内容,希望文章能够帮你解决数组去重(es5,es6)所遇到的问题。

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

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