javascript如何数组去重_有哪些高效方式


推荐使用[...new Set(arr)]去重,简洁高效,适用于字符串、数字等基本类型;含对象需用filter+indexOf或reduce+includes;大数据量推荐Set辅助的filter方案。

JavaScript 数组去重有多种方式,高效与否取决于数据规模、元素类型(是否含对象)、是否需保持顺序,以及浏览器兼容性要求。现代写法简洁且性能好,老环境则需兼顾兼容性。

用 Set 快速去重(推荐,适合基础类型)

Set 自动过滤重复值,配合扩展运算符或 Array.from 转回数组,代码最简、性能优秀,适用于字符串、数字等基本类型:

  • const unique = [...new Set(arr)]
  • const unique = Array.from(new Set(arr))

注意:Set 对象元素视为不同({a:1}{a:1} 不去重),不适用于含对象的数组。

filter + indexOf(兼容老浏览器,保持顺序)

利用 indexOf 返回首次出现索引,只保留“第一次出现的位置”,天然保序,兼容 IE9+:

  • const unique = arr.filter((item, i) => arr.indexOf(item) === i)

缺点是时间复杂度 O(n²),大数据量时略慢;但逻辑清晰,适合中小数组或需兼容旧环境的场景。

reduce + includes(语义清晰,兼容性较好)

reduce 累积结果数组,每次检查新元素是否已存在,可读性强,支持 IE11+:

  • const unique = arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], [])

注意:对大数组,includes 查找也是 O(n),整体仍是 O(n²);若追求性能,可改用 Set 辅助判断(见下条)。

Map / Set 辅助的高性能方案(大数据量首选)

当数组很长(如上万项),需避免嵌套循环时,可用 Set 记录已见元素,单次遍历完成:

  • const seen = new Set(); const unique = arr.filter(item => !seen.has(item) && seen.add(item))

这本质是“空间换时间”,时间复杂度降为 O(n),适合处理大量基础类型数据。

基本上就这些。日常开发优先用 [...new Set(arr)];要兼容老浏览器或需定制逻辑(比如按对象某个字段去重),再选 filter 或 reduce 配合判断。去重本身不复杂,但选错方法容易在大数据下拖慢页面。


# javascript  # java  # 大数据  # 浏览器  # red 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11截图快捷键是什么_Win11自带截图工具使用技巧【汇总】  如何在Windows上设置闹钟和计时器_系统自带的时钟应用全攻略【生活技巧】  Windows怎样关闭开始菜单广告_Windows关闭开始菜单广告设置【步骤】  LINUX如何开放防火墙端口_Linux firewalld与iptables开放端口命令【安全配置】  C++中的constexpr和const有什么区别?(编译期常量)  Win11怎么解压RAR文件 Win11自带解压功能使用方法  MAC如何快速搜索大文件_MAC磁盘空间分析与冗余数据清理【方法】  Windows10如何更改任务栏高度_Win10解除锁定调整大小  Python迭代器生成器进阶教程_节省内存与懒加载实战  mac怎么看硬盘大小_MAC查看磁盘存储空间与文件占用【详解】  php485返回数据不完整怎么办_php485数据分包重组处理方法【教程】  c++怎么实现大文件的分块读写_c++ 文件指针seekp与seekg偏移控制【方法】  如何使用Golang实现容器自动化运维_Golang Docker运维管理方法  Win10怎么设置开机密码_Windows10账户登录密码设置与取消  Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系统【安全指南】  Windows10电脑怎么设置文件权限_Win10安全选项卡所有者修改  VSC怎么配置PHP的Xdebug_远程调试设置步骤【详解】  phpstudy本地环境mysql忘记密码_重置mysqlroot密码操作流程【解答】  ACF 教程:如何正确更新嵌套在多层 Group 字段内的子字段  Win11声音太小怎么办_Windows 11开启响度均衡增强音量【技巧】  Win11如何隐藏桌面图标 Win11一键隐藏/显示桌面图标【指南】  Win10怎么卸载迅雷_Win10彻底卸载迅雷方法【步骤】  Win11快速助手怎么用_Win11远程协助连接教程【工具】  如何在 PHP 中按相同键合并两个关联数组为二维数组  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  Python高性能计算项目教程_NumPyCythonGPU并行加速  Win11此电脑不在桌面上_Windows 11桌面图标设置找回【步骤】  php嵌入式日志记录怎么实现_php将硬件数据写入本地日志文件【指南】  Mac的“预览”如何合并多个PDF_Mac文件处理技巧【效率】  如何在Golang中实现基础配置管理功能_Golang配置文件读取与更新示例  Python函数接口文档化_自动化说明【指导】  Win11麦克风没声音怎么设置_Win11麦克风权限及驱动修复【教程】  PHP 中 require() 语句返回值的用法详解  Win11怎么清理C盘OneDrive缓存_Win11清理OneDrive缓存技巧【方法】  Python与Docker容器化部署实战_镜像构建与CI/CD流程  如何关闭Win10自动更新更新_Win10系统自动更新双重关闭技巧  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  Windows Defender扫描失败怎么办_安全模块损坏修复方式  php增删改查在php8里有什么变化_新特性对curd的影响【指南】  如何使用Golang理解结构体指针方法接收者_Golang修改字段实践  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  PHP cURL GET请求:正确设置请求头与身份认证的完整教程  php怎么下载安装后测试是否成功_简单脚本验证方法【操作】  Go 语言标准库为何不提供泛型 Contains 方法:设计哲学与类型系统约束  Linux如何安装Golang环境_Linux下Go语言开发包配置【方法】  Win11怎么设置右键刷新选项_Windows11显示更多选项技巧  Windows10如何彻底关闭自动更新_Win10服务与组策略双重禁用  VSC怎样在VSC中调试PHPAPI_接口调试技巧【详解】  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Win10文件历史记录怎么用 Win10开启自动备份文件教程【防丢】 

 2025-12-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.