ES5 ES6中Array对象去除重复项的方法总结

 更新时间:2017年04月27日 14:18:49   作者:Microzz  
这篇文章主要给大家介绍了Array对象去除重复项的相关资料,文中通过示例代码详细介绍了在ES5和ES6中Array对象去除重复项的方法,需要的朋友可以参考借鉴,下面来一起看看吧。

输入例子

[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 ,所以需要进行一下判断,这是很多人容易忽视的。

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;
}

验证

我们只需要在数组上直接调用 uniq 方法就可以了,如:

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

结果为:

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

进阶

ES6的实现

ES6新增了 Set 对象,也就是我们所说的“集合”,它类似于数组,但是成员的值都是唯一的,没有重复的值。所以可以方便去重。

Set本身是一个构造函数,用来生成Set数据结构。(详看👉Set和Map数据结构)

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

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

代码中用 Array.from 把 Set 结构转换成数组,当然,你也可以用其他方法,这里不深究。这里去重关键代码只需要一行,是不是非常简单?😄

如果你要优雅一点,可以使用 ES6 的扩展运算符。如下:

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • 关于js new Date() 出现NaN 的分析

    关于js new Date() 出现NaN 的分析

    在一个项目中需要进行日期的格式化,后台传到前端是时间的整数(Date.getTime),当后台数据返回字符串时,发现转换日期时在ie下变成NaN,但是真的是这样吗?接下来我们慢慢分析
    2012-10-10
  • javascript密码强度校验代码(两种方法)

    javascript密码强度校验代码(两种方法)

    为了保证网站个人信息的安全,很多网站在注册页面都设置密码强度这项,用javascript如何实现密码强度校验代码呢?下面小编给大家整理了两种方法使用javascript密码强度校验代码,有需要的朋友可以参考下
    2015-08-08
  • Extjs 点击复选框在表格中增加相关信息行

    Extjs 点击复选框在表格中增加相关信息行

    这篇文章主要介绍了Extjs 点击复选框在表格中增加相关信息行 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • 使用javascript实现判断当前浏览器

    使用javascript实现判断当前浏览器

    这篇文章主要介绍了使用javascript实现判断当前浏览器的类型及版本,虽然不是很全面,但是还是推荐给大家,简单学下方法和思路。
    2015-04-04
  • 浅谈Javascript线程及定时机制

    浅谈Javascript线程及定时机制

    这篇文章主要介绍了浅谈Javascript线程及定时机制的相关资料,需要的朋友可以参考下
    2015-07-07
  • 200行代码实现blockchain 区块链实例详解

    200行代码实现blockchain 区块链实例详解

    这篇文章主要介绍了200行代码实现blockchain 区块链的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2018-03-03
  • JavaScript+Canvas实现简单的柱状图

    JavaScript+Canvas实现简单的柱状图

    这篇文章主要为大家详细介绍了JavaScript如何利用Canvas实现绘制简单的柱状图,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • JavaScript实现楼梯滚动特效(jQuery实现)

    JavaScript实现楼梯滚动特效(jQuery实现)

    这篇文章主要为大家详细介绍了JavaScript实现楼梯滚动特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 微信小程序实现短信验证码倒计时

    微信小程序实现短信验证码倒计时

    这篇文章主要为大家详细介绍了微信小程序实现短信验证码倒计时,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 一起来学习TypeScript的类型

    一起来学习TypeScript的类型

    这篇文章主要为大家详细介绍了TypeScript的类型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02

最新评论