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存储桶【教程】

