信息发布→ 登录 注册 退出

J*aScript中数组去重怎么做_有哪些高效方案

发布时间:2025-12-13

点击量:
J*aScript数组去重需据场景选择:小数据量用[...new Set(arr)],兼容性好且保持顺序;老旧环境用filter+indexOf;大数据量用Set哈希过滤;对象数组则按字段去重。

javascript中数组去重怎么做_有哪些高效方案

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 Musho

AI网页设计Figma插件

Musho 76 查看详情 Musho
  • 基础版(仅限字符串/数字)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.iditem => [item.name, item.age].join('|')
  • 注意:避免直接用JSON.stringify做key,性能差且不稳定(如属性顺序不同会导致key不同)

基本上就这些。日常开发中,[...new Set(arr)]覆盖80%需求;真遇到几万条数据或对象去重,再上Map/Set手动过滤。不复杂,但容易忽略适用边界。

以上就是J*aScript中数组去重怎么做_有哪些高效方案的详细内容,更多请关注其它相关文章!


相关文章: 漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  css链接悬停下划线样式如何自定义_使用::after结合content和transition  微信群消息显示延迟如何解决 微信群消息刷新优化方法  解决深度学习模型训练初期异常高损失与完美验证准确率问题  win11跳过OOBE三种方法 Win11跳过OOBE设置步骤  动漫岛观看全网网 动漫岛在线正版动漫入口  Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】  Python实时数据流中的动态最值查找策略  支付宝如何设置安全保护_支付宝安全设置的全面教程  Python async/await 协程:CPU密集型任务的陷阱与解决方案  TypeScript/J*aScript:高效查找数组中首个唯一ID对象  优化Django表单:提交验证失败后保留用户输入  PHP中高效并行检查多链接状态的教程  J*a 递归快速排序中静态变量的状态管理与陷阱  Angular中父组件异步更新子组件复选框状态的实践指南  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度  一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法  腾讯QQ邮箱官方网站_QQ邮箱网页版在线登录  优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南  12306选座系统怎么选连座_12306选座多人连坐操作方法  优化大型XML文件解析:基于Python流式处理的内存高效方案  解决Python logging 中 datefmt 导致时间戳固定不变的问题  J*aScript中在Map循环中检测并处理空数组元素  Archive of Our Own官网直达 AO3最新可用地址一览  qq游戏免费畅玩入口_qq游戏电脑版快速启动  EMS快递官网app_中国邮政速递物流手机客户端  C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用  文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】  将JSON对象数组转置为键值对列表的实用指南  win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】  优化Lar*el Docker镜像:Composer与PHP版本控制策略  机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  JUnit5/Mockito:优雅测试内部依赖与异常处理的实践  Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法  ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接  黑猫投诉统一入口官网 消费者权益保护投诉平台  格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能  12306选座怎么选到商务座_12306商务座选择与配置说明 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!