新闻中心

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中数组去重怎么做_有哪些高效方案的详细内容,更多请关注其它相关文章!


# 老旧  # 有没有便宜的推广网站  # 河北网站建设详细策划  # 无锡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官方网站手机最新链接 

搜索