码迷,mamicode.com
首页 > 其他好文 > 详细

为Array对象添加一个去重的方法(ES5和ES6的实现)

时间:2017-04-03 22:15:09      阅读:901      评论:0      收藏:0      [点我收藏+]

标签:数组去重   java   param   运算   方便   自己   ref   判断   nan   

输入一个例子

[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

在不考虑NaN的情况下我是使用indexOf判断是不是-1 或者是inCludes是不是false,再添加到数组中去。 

ES5的实现如下:

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;
}
上边的if语句就是为了判断是不是NaN,给NaN一个标识,只要进来一次NaN就把他置为false,之后的话NaN再进入判断就不会再添加进去。这是真的精妙~
之后调用uniq方法,如
[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a‘, ‘a‘, NaN].uniq()
这里的话自己测试一下吧!
 
ES6的实现如下:
ES6新增了Set对象,也就是我们所说的“集合”,它类似于数组,但是成员的值都是唯一的,没有重复的值。所以可以方便去重。
Set本身是一个构造函数,用来生成Set数据结构。
Array.prototype.uniq = function() {
  return Array.from(new Set(this));
}
代码中Array.from把Set结构换成数组,最最重要的是代码只需要一行就能实现
如果要写的优雅一点的话,可以使用ES6的扩展运算符
Array.prototype.uniq = function() {
  return [...new Set(this)];
}
 
 

为Array对象添加一个去重的方法(ES5和ES6的实现)

标签:数组去重   java   param   运算   方便   自己   ref   判断   nan   

原文地址:http://www.cnblogs.com/lixiang666/p/6663659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!