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

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

数组的去重

题目要求

[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知识点(一))