新闻中心

数组去重:多种方案与性能对比

2025-11-24
浏览次数:
返回列表
答案:数组去重推荐使用Set(基本类型)、Map标记法(对象数组),根据数据类型、规模和环境选择方案。

数组去重:多种方案与性能对比

数组去重是前端开发中常见的需求,不同方法在性能、兼容性和可读性上各有优劣。下面介绍几种主流的数组去重方案,并结合实际场景分析其性能表现。

1. 使用 Set 去重(推荐基础方案)

原理: ES6 提供的 Set 数据结构自动保证元素唯一性,结合扩展运算符可快速实现去重。

优点:代码简洁,性能优秀,适用于基本类型数组。 缺点:无法区分对象引用,对复杂对象无效。

示例:

const arr = [1, 2, 2, 3, 4, 4, 5];
const unique = [...new Set(arr)];
// 结果:[1, 2, 3, 4, 5]

2. filter + indexOf(兼容性好)

原理: 遍历数组,通过 indexOf 返回第一个匹配索引,若与当前索引一致则保留。

优点:兼容老浏览器(IE9+),逻辑清晰。 缺点:时间复杂度 O(n²),大数据量时性能差。

示例:

const unique = arr.filter((item, index) => arr.indexOf(item) === index);

3. reduce + includes(适合复杂判断)

原理: 利用 reduce 累积唯一值,使用 includes 检查是否已存在。

eSiteGroup站群管理系统1.0.4 eSiteGroup站群管理系统1.0.4

eSiteGroup站群管理系统是基于eFramework低代码开发平台构建,是一款高度灵活、可扩展的智能化站群管理解决方案,全面支持SQL Server、SQLite、MySQL、Oracle等主流数据库,适配企业级高并发、轻量级本地化、云端分布式等多种部署场景。通过可视化建模与模块化设计,系统可实现多站点的快速搭建、跨平台协同管理及数据智能分析,满足政府、企业、教育机构等组织对多站点统一管控的

eSiteGroup站群管理系统1.0.4 0 查看详情 eSiteGroup站群管理系统1.0.4 优点:灵活性高,便于加入自定义逻辑。 缺点:同样 O(n²) 复杂度,不适用于大数组。

示例:

const unique = arr.reduce((acc, item) =>; {
  return acc.includes(item) ? acc : [...acc, item];
}, []);

4. Map 或 Object 标记法(高性能复杂类型处理)

原理: 遍历数组,用 Map 记录已出现的值,键为字符串化后的值或引用。

优点:支持对象去重,时间复杂度 O(n),性能最优。 缺点:需手动处理键生成逻辑,如 JSON.stringify 可能有局限。

示例(基于对象属性去重):

const unique = (arr, key) => {
  const seen = new Map();
  return arr.filter(item => {
    const k = item[key];
    if (seen.has(k)) return false;
    seen.set(k, true);
    return true;
  });
};

性能对比总结:

  • 基本类型小数组: Set 最快且简洁。
  • 大数组或频繁操作: Map 标记法更稳定高效。
  • 需要兼容旧环境: filter + indexOf 可用,但避免处理万级数据。
  • 对象数组去重: 必须使用 Map 或 Object 配合唯一键提取。

基本上就这些。选择哪种方式,取决于数据类型、规模和运行环境。Set 是大多数情况下的首选,复杂场景再考虑定制方案。不复杂但容易忽略的是去重依据——是值相等?引用相同?还是某个字段唯一?明确这一点才能选对方法。

以上就是数组去重:多种方案与性能对比的详细内容,更多请关注其它相关文章!


# js  # 重构  # 如何实现  # 有什么不同  # 运算符  # 遍历  # 数据结构  # 管理系统  # 前端开发  # 浏览器  # 大数据  # json  # 前端  # es6  # red  # seo关键词设定原则  # 西安营销推广平台  # 健身中心营销推广  # 莆田知名seo公司排名  # 包包推广营销方案怎么写  # 亦庄大型网站推广  # 安阳百度seo网站优化哪家好  # 之奢怎么推广市场营销的  # 蓬莱行业网站营销推广  # 新安短视频营销推广  # 有哪些  # 运行环境  # 的是 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 如何在Promise链中有效终止错误处理后的执行  新手怎么开始学化妆 零基础化妆入门教程  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  整合Supabase认证与Django模型:跨模式迁移的解决方案  MongoDB聚合管道:正确匹配对象数组中_id的方法  Animex动漫社网入口地址 Animex动漫社网正版在线入口  顺丰快递查单号物流信息 顺丰快递小程序查询入口  Mac怎么查看崩溃日志_Mac控制台错误报告分析  c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发  NetBeans Ant项目:自动化将资源文件复制到dist目录的教程  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  c++20的std::jthread是什么_c++可中断线程与RAII式管理  妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画  ArrayList与LinkedList核心操作的Big-O复杂度分析  抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站  在Go Martini框架中高效服务动态生成图像的实践指南  新三国志曹操传110级星符试炼夏侯渊极难攻略  win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法  163邮箱注册官网 免费申请163个人邮箱  如何更改在 Excel 中打开超链接时的默认浏览器  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  Golang如何测试channel通信行为_Golang channel通信测试与分析方法  如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension  React Hooks最佳实践:动态组件状态管理的组件化方案  GemBox Document HTML转PDF垂直文本渲染问题及解决方案  Django模型中自动计算可用余额的实现方法  小米汽车11月交付量突破40000台!雷军:将继续努力  黑猫投诉统一入口官网 消费者权益保护投诉平台  mc.js免安装版 mc.js一键畅玩入口  大麦的“候补”是什么意思 大麦候补购票规则【详解】  优化Log4j2控制台输出性能:解决异步日志瓶颈  poki网页游戏推荐_poki免费游戏平台入口  使用CSS更改登录屏幕输入框中PNG图标颜色的策略与局限性  响应式容器内容自动缩放与宽高比维持教程  在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析  VS Code远程开发时如何处理文件权限问题  Python多线程中正确使用sigwait处理SIGALRM信号  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  Steam官网入口直达 Steam注册及登录步骤  服务端验证_j*ascript输入检查  《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元  Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践  如何在Python中使用Optional类型处理可变对象并避免Pylint警告  uc浏览器网页版极速入口 uc网页浏览器网页版流畅体验  UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】  如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流  汽水音乐在线版入口_汽水音乐网页播放手册  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版  漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址 

搜索