美文网首页
数组去重,JS知识点(一)

数组去重,JS知识点(一)

作者: whyexist | 来源:发表于2018-01-31 00:02 被阅读0次

    有的时候,想的是挺好的,但是下笔的时候经常会忘了想要写些什么。积累一些知识点,总是好的,下面让我们看一下数组的去重。

    数组的去重

    题目要求

    [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq()
    

    输出结果

    [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']
    

    分析需求

    题目是给Array添加方法,所以需要用到prototype。数组去重方法本身并不难,但是在JavaScript中,很多人会忽视NaN的存在,因为在JS中NaN != NaN,我们需要对它进行一下判断。具体操作如下

    代码实现

    Array.prototype.uniq() = function(){
      var arr = [];
      var flag = true;
      this.foreach(function(item){
        //判断是否是NaN
        if(item != item){
          flag && arr.indexOf(item) === -1 ? arr.push(item) : '';
          flag = false;
        } else{
          arr.indexOf(item) === -1 ? arr.push(item) : '';
        }
      })
      return arr;
    }
    

    ES6

    ES6新增了 Set对象,也就是我们所说的“集合”,它类似于数组,但是成员的值都是唯一的,没有重复的值。所以可以方便去重。
    Set本身是一个构造函数,用来生成Set数据结构。

    如果用ES6为 Array 对象添加一个去除重复项的方法,则可以如下实现:

    Array.prototype.uniq() = function(){
      return Array.from(new Set(this));
    }
    

    代码中用 Array.fromSet 结构转换成数组,如果你要优雅一点,可以使用 ES6 的扩展运算符。如下

    Array.prototype.uniq() = function(){
      return [...new Set(this)];
    }
    

    相关文章

      网友评论

          本文标题:数组去重,JS知识点(一)

          本文链接:https://www.haomeiwen.com/subject/evvhzxtx.html