资讯专栏INFORMATION COLUMN

数组去重(es5,es6)

Prasanta / 681人阅读

摘要:遍历无法判断循环去重效率较高遍历效率不如判断不出遍历遍历解决无法排除问题排除解决问题索引去重把直接全部去除掉了索引去重索引去重集合转换效率低能去掉重复集合转换挂载方法到上总结遍历无法判断需要手动判断效率最高索引去重直接把所有干掉了看

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,但是效率最低;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108499.html

相关文章

  • 数组去重--这几种方法够不?

    摘要:数组去重是校招面试的必考知识点。以下就是笔者所实现的数组去重的几种简单的方式。结合实现这种方法的关键点就是判断是否相同的时候不要忽略对元素类型的判断。以上就是笔者所想到的几个数组去重的方式大家如果有更好的方法欢迎留言。 数组去重,是校招面试的必考知识点。简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个。这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略...

    wendux 评论0 收藏0
  • js数组去重(包含ES6解决方案)

    摘要:前几天在做了一道题,这道题的核心问题是数组去重。现写一函数,返回一个新的升序的字符串,其值由中的值组成,要求包含最多字符且不能重复。代码中的和函数是中的数组方法。 前几天在codewars做了一道题,这道题的核心问题是数组去重。昨晚之后看到别人的solution,感觉自己的solution太low了。 题目 Take 2 strings s1 and s2 including only...

    Near_Li 评论0 收藏0
  • JS数组去重总结

    摘要:数组去重,一般会在面试的时候才会碰到,要求手写数组去重方法的代码。在实际项目中碰到的数组去重,一般都是后台去处理,很少让前端处理数组去重。数组去重的方法一利用去重中最常用如果不考虑兼容性,这种去重的方法代码最少。 数组去重,一般会在面试的时候才会碰到,要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看。 在实际项目中碰到的...

    whinc 评论0 收藏0
  • JavaScript数组去重(12种方法,史上最全)

    摘要:数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些你能答出其中的种,面试官很有可能对你刮目相看。数组去重的方法一利用去重中最常用不考虑兼容性,这种去重的方法代码最少。 数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看...

    rozbo 评论0 收藏0

发表评论

0条评论

Prasanta

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<