数组去重的多种方法_性能对比与适用场景分析


首选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 存储。

灵思AI 灵思AI

专业的智能写作辅助平台

灵思AI 163 查看详情 灵思AI 示例:
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军刀淘宝破解  # 相关文章  # 键名  # javascript  # 扁平化  # 是一个  # 服务端  # 源代码  # 遍历  # 有什么  # 数据结构  # red  # 浏览器  # 大数据  # java  # es6 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 知音漫客官网首页入口_知音漫客热门漫画推荐  《下一站江湖2》武器获取方法  抖音手机分身两个账号怎么切换?分身两个系统是一样的吗?  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  解决jQuery多计算器输入字段冲突的教程  如何在CSS中使用伪类选择器_hover实现悬停效果  德邦快递收费标准详解  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  J*aScript与HTML元素交互:图片点击事件与链接处理教程  之了课堂app做题入口  电脑视频号|直播|如何分享屏幕  电子白板帮助菜单使用指南  Eclipse开发J*a快速入门  163邮箱网页版官方登录入口 163邮箱网页版访问页面  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程  Yandex世界探索 最新官方免登录入口全知道  Go App Engine 项目结构与包管理深度指南  漫蛙manwa2网页版书签同步链接_漫蛙manwa多设备登录入口  ao3入口镜像地址 ao3镜像入口可靠跳转  Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  店铺如何关联视频号推广?视频号推广有什么用?  win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】  繁花漫画使用教程  Python高效统计字典嵌套列表值在目标列表中的出现次数  C++中的explicit关键字有什么作用_C++类型转换控制与explicit使用  高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践  Apple Music无故扣费引质疑  除了Copilot,还有哪些值得一试的VS Code AI插件?  《大学搜题酱》官网地址登录  哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  Composer如何使用composer-plugin-api开发自定义插件  POKI小游戏在线免费入口链接 POKI小游戏无下载秒玩玩  PointNet++语义分割模型中类别变更引发的断言错误及标签处理策略  如何使用 composer 和 aop-php 实现 AOP 编程?  电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】  实时数据流中高效查找最小值与最大值  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  b站怎么设置动态仅粉丝可见_b站动态粉丝可见设置方法  sublime怎么快速在浏览器中预览HTML_sublime配置View in Browser教程  中大网校app做题记录清除方法  键盘保修需要什么_键盘售后维修流程  cad加载的线型看不见怎么办_cad线型不可见问题解决方法  解决PHP MySQL数据库更新无响应:SQL查询语法错误解析  《绿竹漫游》关闭消息通知方法  《小宇宙》标记不友善评论方法  解决Go encoding/json 将JSON大数字解析为浮点数的问题  快递查询,一键速查  动漫岛在线动漫网 动漫岛动漫在线观看官方入口  《虎扑》关闭社区内容推荐方法 

 2025-12-03

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

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

点击免费数据支持

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

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@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.