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

发布时间 - 2026-01-11 00:52:11    点击率:

输入例子

[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)];
}

总结

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


# array  # 去除重复  # js  # 数组去除重复对象  # 详解JavaScript ES6中的模板字符串  # 浅谈ES6 模板字符串的具体使用方法  # ES6新特征数字、数组、字符串  # ES6新特性之变量和字符串用法示例  # JavaScript中ES6字符串扩展方法  # JavaScript学习笔记之ES6数组方法  # ES6使用Set数据结构实现数组的交集、并集、差集功能示例  # ES6新特性七:数组的扩充详解  # 浅谈ES6新增的数组方法和对象  # ES6中箭头函数的定义与调用方式详解  # ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析  # 数据结构  # 是一个  # 进阶  # 这是  # 但是在  # 很难  # 你要  # 你也  # 很多人  # 可以用  # 只需  # 要在  # 只需要  # 可以使用  # 又不  # 这篇文章  # 人会  # 谢谢大家  # 则可  # 转换成 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何利用DOS批处理实现定时关机操作详解  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  如何在VPS电脑上快速搭建网站?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  javascript读取文本节点方法小结  如何注册花生壳免费域名并搭建个人网站?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  米侠浏览器网页背景异常怎么办 米侠显示修复  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  详解Android图表 MPAndroidChart折线图  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  如何在不使用负向后查找的情况下匹配特定条件前的换行符  详解jQuery中基本的动画方法  详解MySQL数据库的安装与密码配置  如何在IIS中新建站点并解决端口绑定冲突?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  javascript日期怎么处理_如何格式化输出  Laravel如何实现用户密码重置功能?(完整流程代码)  香港服务器如何优化才能显著提升网站加载速度?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Python文本处理实践_日志清洗解析【指导】  如何实现建站之星域名转发设置?  专业商城网站制作公司有哪些,pi商城官网是哪个?  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  如何在自有机房高效搭建专业网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  JS碰撞运动实现方法详解  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  javascript中对象的定义、使用以及对象和原型链操作小结  如何用IIS7快速搭建并优化网站站点?  香港服务器部署网站为何提示未备案?  如何自定义建站之星网站的导航菜单样式?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  原生JS获取元素集合的子元素宽度实例  Laravel怎么判断请求类型_Laravel Request isMethod用法  jQuery中的100个技巧汇总  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】