新闻中心
数组去重的多种方法_性能对比与适用场景分析
首选Set去重基础类型,代码简洁性能高;兼容旧环境用filter+indexOf;对象数组按字段去重推荐Set结合filter,高效且可扩展。

在 J*aScript 开发中,数组去重是一个常见需求。不同的业务场景对性能和兼容性要求不同,因此选择合适的去重方法至关重要。本文将介绍多种数组去重方式,分析其原理、性能表现及适用场景。
1. 利用 Set 去重(推荐基础类型)
ES6 引入的 Set 数据结构天然支持唯一值,是目前最简洁高效的去重方式。
示例:const unique = arr => [...new Set(arr)]; const arr = [1, 2, 2, 3, 4, 4, 5]; console.log(unique(arr)); // [1, 2, 3, 4, 5]
✅ 优点:代码简洁,性能优秀,适合基础类型(数字、字符串、布尔)去重。
❌ 缺点:无法处理对象等引用类型,NaN 会被保留一个(Set 认为 NaN 等于 NaN)。
? 适用场景:基础类型数组,现代浏览器环境。
2. 使用 filter + indexOf(兼容旧环境)
通过 filter 遍历数组,利用 indexOf 判断当前元素是否首次出现。
示例:const unique = arr => arr.filter((item, index) => arr.indexOf(item) === index);
✅ 优点:兼容性好,支持 IE9+。
❌ 缺点:时间复杂度为 O(n²),大数据量下性能较差。
? 适用场景:小数据量、需兼容老浏览器的项目。
3. 使用 reduce + includes(逻辑清晰)
借助 reduce 构建新数组,每次判断元素是否已存在。
示例:const unique = arr => arr.reduce((acc, cur) => {
return acc.includes(cur) ? acc : [...acc, cur];
}, []);
✅ 优点:逻辑清晰,易于理解与扩展。
❌ 缺点:includes 同样是 O(n),整体复杂度 O(n²),性能一般。
? 适用场景:教学演示或需自定义去重逻辑时。
4. 利用对象键名去重(历史方案)
利用对象属性名不可重复的特性,将数组元素作为 key 存储。
eSiteGroup站群管理系统1.0.4
eSiteGroup站群管理系统是基于eFramework低代码开发平台构建,是一款高度灵活、可扩展的智能化站群管理解决方案,全面支持SQL Server、SQLite、MySQL、Oracle等主流数据库,适配企业级高并发、轻量级本地化、云端分布式等多种部署场景。通过可视化建模与模块化设计,系统可实现多站点的快速搭建、跨平台协同管理及数据智能分析,满足政府、企业、教育机构等组织对多站点统一管控的
0
查看详情
示例:
const unique = arr => {
const obj = {};
return arr.filter(item => {
return obj.hasOwnProperty(item) ? false : (obj[item] = true);
});
};
⚠️ 注意:所有值都会被转为字符串,导致 1 和 '1' 被视为相同。
? 适用场景:仅用于纯字符串或数字且不区分类型的特殊情况,现已较少使用。
5. 处理对象数组去重(按指定字段)
当数组元素为对象时,需根据某个唯一字段(如 id)进行去重。
示例:const uniqueBy = (arr, key) => {
const seen = new Set();
return arr.filter(item => {
const val = item[key];
if (seen.has(val)) {
return false;
}
seen.add(val);
return true;
});
};
✅ 优点:高效,可扩展性强。
? 适用场景:接口返回的列表数据去重,如用户列表按 userId 去重。
6. 性能对比简析
在 10万 条随机整数测试中:
- Set 方式:约 10-20ms,最快
- reduce + includes / filter + indexOf:超过 1000ms,明显变慢
- 对象键名方式:约 100ms,中等但有类型隐患
Set
借助哈希表实现,查找时间接近 O(1),远优于遍历类方法。
基本上就这些。简单去重首选 Set;兼容老环境可用 indexOf;对象数组则结合 Set 按字段过滤。方法不复杂,但选对才能兼顾效率与稳定。
以上就是数组去重的多种方法_性能对比与适用场景分析的详细内容,更多请关注其它相关文章!
# 相关文章
# 玄武区网站建设公司电话
# 茂名公司seo优化
# seo优化标签属性
# 高邑企业网站推广报价公示
# 青海提供网站建设热线
# 贵州seo推广商家
# 哈尔滨百度seo算法
# 苏州抖音seo怎么合作
# 湖北网站推广有哪些渠道
# 网站推广百度百科
# 布尔
# 中文网
# javascript
# 键名
# 首次
# 是一个
# 用户发送
# 遍历
# 数据结构
# 管理系统
# red
# 浏览器
# 大数据
# java
# es6
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
C++指针和引用有什么区别_C++内存管理核心概念深度解析
C++如何解决segmentation fault_C++段错误调试与原因分析
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
PHP高效扁平化嵌套数组:使用array_merge与数组解包操作符
Mac终端命令大全_Mac常用Terminal指令速查
steam官方入口大全 steam账号注册及操作指南
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
照顾宝贝2小游戏点击立即在线玩
抖音未来赚钱的新趋势 2025年值得关注的变现风口分析
移动端XML文件怎么转换成Excel 手机和平板上的解决方案
星露谷物语官网入口 星露谷物语游戏官网入口
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间
ACG动漫视频网入口 ACG动漫*免费正版观看地址
J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明
Sublime Text怎么显示空格和制表符_Sublime显示不可见字符设置
uc手机浏览器网页版入口 uc浏览器手机版便捷登录首页
如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
Lar*el 递归关系中排除指定分支的教程
从OpenAI API响应中高效提取生成文本
支付宝如何管理隐私设置_支付宝隐私保护的配置技巧
C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责
Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】
HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解
Win11怎么关闭触摸屏_Windows 11禁用HID符合标准触摸屏
文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】
J*aScript中向JSON对象添加新属性的正确姿势
免费抖音短视频入口_抖音网页版短视频免费通道
2026春节假期时间安排 2026春节假日查询
mcjs网页版在线存档 mcjs云存档登录入口
J*aScriptWebpack优化_J*aScript构建工具实战
汽水音乐车机版8.9下载 汽水音乐车机版8.9版本安装入口
在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用
最新韩小圈网页版登录入口_官网在线观看官方链接
解决Flask中Quill编辑器内容提交失败及TypeError的指南
AO3中文官网链接_AO3网页版稳定镜像站
解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常
新三国志曹操传110级星符试炼夏侯渊极难攻略
漫蛙2网页版漫画入口 漫蛙漫画在线官方登录
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
c++如何实现单例设计模式_c++线程安全的单例模式写法
Win11怎么修改默认浏览器_Windows 11设置Chrome为默认
Python异步编程实践:使用Binance API构建实时交易数据流
J*a最大堆Heapify方法修复:索引计算与边界条件深度解析
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|
微信语音通话掉线如何解决 微信语音通话稳定优化方法


2025-12-03
浏览次数:次
返回列表