新闻中心
J*aScript中数组去重怎么做_有哪些高效方案
J*aScript数组去重需据场景选择:小数据量用[...new Set(arr)],兼容性好且保持顺序;老旧环境用filter+indexOf;大数据量用Set哈希过滤;对象数组则按字段去重。

J*aScript数组去重有多种方式,核心在于根据场景选对方法:小数据量图简单,大数据量看性能,还要兼顾是否保留顺序、是否处理对象等细节。
Set + 扩展运算符(最常用)
适合基本类型(数字、字符串)且要求保持原顺序的场景,代码简洁、可读性强、现代浏览器兼容好。
- 原理:Set自动去重,扩展运算符转回数组
-
写法:
[...new Set(arr)] -
注意:不能处理对象或NaN的深层相等(比如
{a:1}和{a:1}仍算不同)
filter + indexOf(兼容性最好)
适用于需要支持老旧环境(如IE)或明确依赖索引逻辑的场景,语义清晰,但时间复杂度为O(n²)。
-
写法:
arr.filter((item, index) => arr.indexOf(item) === index) - 优点:不依赖ES6,所有数组元素都走一遍比较
-
缺点:重复调用
indexOf,大数据量时明显变慢
Map 或 Object 做哈希记录(大数据量首选)
当数组很长(上万项)、又需保留顺序时,用一次遍历+哈希查找,效率接近O(n),比filter方案快得多。
Musho
AI网页设计Figma插件
76
查看详情
-
基础版(仅限字符串/数字):
arr.reduce((unique, item) => unique.has(item) ? unique : unique.set(item, 1) && unique, new Map()).keys(),再转数组 -
更实用写法:
const seen = new Set(); const result = arr.filter(item => !seen.has(item) && seen.add(item));
-
扩展提示:若要处理对象,可序列化键名(如
JSON.stringify(obj)),但要注意属性顺序、undefined、函数等会被忽略
针对对象数组的去重(按指定字段)
不能直接用Set,需自定义唯一标识。常见做法是提取关键字段拼接成字符串作为key。
-
示例(按id去重):
const seenIds = new Set(); const uniqueByField = arr.filter(item => { if (seenIds.has(item.id)) return false; seenIds.add(item.id); return true; }); -
通用函数思路:接收数组和一个取值函数(如
item => item.id或item => [item.name, item.age].join('|')) -
注意:避免直接用
JSON.stringify做key,性能差且不稳定(如属性顺序不同会导致key不同)
基本上就这些。日常开发中,[...new Set(arr)]覆盖80%需求;真遇到几万条数据或对象去重,再上Map/Set手动过滤。不复杂,但容易忽略适用边界。
以上就是J*aScript中数组去重怎么做_有哪些高效方案的详细内容,更多请关注其它相关文章!
# 老旧
# 有没有便宜的推广网站
# 河北网站建设详细策划
# 无锡seo外包报价
# 社会化媒体营销推广实施
# 长安网站建设营销
# 厦门个人网站优化
# 电子商城系统网站建设
# 宿州民革网站建设方案
# 江苏测试网站建设大全
# 上海SEO顾问推推蛙
# 适用于
# 遍历
# 新特性
# javascript
# 点对点
# 带来了
# 运算符
# 怎么做
# 有哪些
# 如何实现
# red
# 浏览器
# 大数据
# json
# js
# java
# es6
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
“在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法
将JSON对象数组转置为键值对列表的实用指南
J*aScript中赋值与自增运算符的复杂交互与执行机制
Centos/Linux 系统下安装 composer 的完整步骤
vivo浏览器怎么扫描二维码 vivo浏览器内置扫一扫功能使用方法
CSS实现侧边栏导航项全宽圆角悬停背景效果
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
处理嵌套交互式控件:前端可访问性指南
如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧
Node.js中HTML按钮与J*aScript函数交互的正确姿势
小米汽车11月交付量突破40000台!雷军:将继续努力
动漫共和国防屏蔽稳定域名-动漫共和国官方正版直达通道
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法
Python:递归比较文件夹内容并找出特定类型文件的差异
yandex入口引擎手机版 yandex安卓版下载入口
2026年CSGO开箱网站推荐 CSGO开箱平台精选
J*a应用程序首次运行自动创建文件与目录的最佳实践
服务端验证_j*ascript输入检查
Typer应用中动态命令行参数的解析与处理
163邮箱注册官网 免费申请163个人邮箱
KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明
谷歌浏览器无痕模式怎么开 Chrome开启无痕浏览设置方法【教程】
如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略
优化大型XML文件解析:基于Python流式处理的内存高效方案
优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践
手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
AO3最新官网入口公告_2025AO3镜像站实时查询方法
mcjs网页版在线存档 mcjs云存档登录入口
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
使用 Pandas 高效处理 .dat 文件:字符清理与数据计算
PySpark中从现有列右侧提取可变长度字符创建新列的教程
深入理解与实现最大堆的Heapify过程:常见错误与修正
极兔快递快件信息查询系统 极兔快递官网运单号追踪
快速CSGO开箱网站指南 CSGO开箱平台推荐
WordPress插件开发:正确注册卸载钩子与避免常见陷阱
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
Yandex免登录网页版地址 Yandex搜索引擎官方访问入口
NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰
Win11怎么查看电脑配置_Win11硬件配置检测工具使用
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
4399体育竞技小游戏_4399小游戏赛事入口
poki免费入口快捷访问 poki人气小游戏直接玩站点
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法
mysql备份恢复性能优化_mysql备份恢复性能优化方法
msn官网入口地址手机版 msn官方网站手机最新链接


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