js实现嵌套数组对象去重


答案:按属性去重可用Map或reduce,多属性组合可拼接键值,深度去重可用JSON.stringify或lodash的isEqual,推荐根据数据结构选择方法。

js实现嵌套数组对象去重

在 J*aScript 中,处理嵌套数组对象去重时,关键在于如何定义“重复”。通常我们认为两个对象的某个或某些属性值相同即为重复。下面以常见场景为例,介绍几种实用的去重方法。

1. 按单一属性去重

如果对象中有一个唯一标识字段(如 id),可以通过该字段进行去重。

使用 Mapreduce 方法按指定属性过滤重复项:

示例数据:
const arr = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 1, name: 'Alice' }
];

方法一:使用 Map

const uniqueById = Array.from(
  new Map(arr.map(item => [item.id, item])).values()
);

方法二:使用 reduce

const uniqueById = arr.reduce((acc, curr) => {
  if (!acc.some(item => item.id === curr.id)) {
    acc.push(curr);
  }
  return acc;
}, []);

2. 按多个属性组合去重

当需要根据多个字段(如 id 和 name)共同判断是否重复时,可以将这些字段拼接成字符串作为唯一键。

示例: 根据 id 和 name 去重

const uniqueByKeys = Array.from(
  new Map(
    arr.map(item => [`${item.id}-${item.name}`, item])
  ).values()
);

这种方法适用于固定字段的精确匹配。

3. 深度去重(处理任意嵌套结构)

若对象结构复杂且需深度比较内容,可借助 JSON.stringify 配合 Set 实现,但注意顺序和类型必须一致。

LALAL.AI LALAL.AI

AI人声去除器和声乐提取工具

LALAL.AI 196 查看详情 LALAL.AI

简单实现:

const deepUnique = Array.from(
  new Set(arr.map(JSON.stringify)),
  JSON.parse
);

注意: 此方法对属性顺序敏感。例如 {a:1,b:2} 和 {b:2,a:1} 被视为不同对象。

如需真正深度比较,建议引入 lodash 的 isEqual,或自行实现递归对比函数。

4. 使用 lodash 简化操作

如果你项目中使用了 lodash,可以直接用 _.uniqBy 方法。

import { uniqBy } from 'lodash';
const result = uniqBy(arr, 'id');
// 多字段支持:uniqBy(arr, o => [o.id, o.name].join('-'))

基本上就这些常用方式。选择哪种取决于你的数据结构和性能要求。对于小数据量,JSON.stringify 方便快捷;对于大数组或复杂逻辑,推荐使用 Map + 键映射的方式,效率更高。

以上就是js实现嵌套数组对象去重的详细内容,更多请关注其它相关文章!


# 扁平化  # 雕塑营销推广方案范文模板  # 开封网站建设工作招聘  # 唐山营销推广咨询招聘  # 线上网站建设报价表  # 网站动态内容建设方案  # seo专员岗位要求广告  # 沈阳新站做seo  # 集美网站建设流程  # 嘉祥品牌seo怎么做  # 高校网站建设费用  # 中有  # 如果你  # javascript  # 服务端  # 源代码  # 多字  # 多个  # 有什么  # 数据结构  # 递归  # red  # json  # js  # java 


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


相关推荐: 芒果TV官网登录入口 芒果TV官方网站登录入口  51漫画网实时入口 51漫画网页版官方免费漫画入口  抖音视频如何添加标题?添加标题有哪些好处?  mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程  J*aScript中高效处理用户输入:从Keyup事件到表单提交的优化实践  windows10怎么开启卓越性能_windows10电源选项代码激活  CSS如何使用outline-offset与颜色组合突出元素边框  《edge浏览器》关闭翻译功能方法  广州地铁app准妈咪徽章领取方法  嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】  优化2xN网格最大路径和的动态规划算法实践  J*aScript文本高亮功能优化:解决多词匹配错误与精确分割策略  VS Code源代码管理(SCM)视图的进阶使用技巧  《星露谷物语》克林特好感度事件介绍  mail.qq.com登录入口 QQ邮箱网页版直达  Mac hosts文件在哪里_Mac修改hosts文件详细教程  告别阻塞等待:如何使用GuzzlePromises优雅处理PHP异步操作,提升应用响应速度  抖音商城官网是什么_抖音商城官方网址与访问方法  MySQL多重JOIN技巧:高效关联同一表获取多角色信息  C++ bind函数使用教程_C++参数绑定与函数适配器的应用  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  Python模块化编程:避免循环导入与共享函数的最佳实践  《真我》申请退款方法  《盗墓笔记手游》技能介绍  edge浏览器怎么修改语言为中文_Edge界面语言切换教程  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  byrutor直接访问入口 byrutor官方游戏库  可米酷漫画在线阅读入口_ 可米酷漫画官网直达链接  CSS如何在页面中引入重置样式_使用Normalize.css或Reset.css统一浏览器默认样式  J*aScript二进制处理_ArrayBuffer与Blob  Golang如何初始化module项目_Golang module init使用说明  苹果手机聊天记录删除了如何恢复  PSD转AI文件的简单方法  PHP中获取HTTP响应状态消息:方法与限制  铁路12306座位怎么选_12306官方选座操作方法  Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置  J*aScript深度克隆:实现高效、健壮与安全的复杂对象复制  电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】  解决J*aScript动态图片上传中ID重复问题:在同一页面显示多张独立图片  t3出行如何使用微信支付  mysql如何限制远程访问_mysql远程访问限制方法  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  快递物流路径揭秘  Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案  百度竞价WAP显示PC链接问题  《大周列国志》皇帝律令功能介绍  晨报|开发商暗示《空洞骑士:丝之歌》DLC开发中 《合金装备4》有望重制  PHP动态导航按钮:根据用户登录状态切换链接与文本  向往的生活小游戏启动处_向往的生活小游戏立即启动  精通VS Code多光标编辑以实现闪电般快速的修改 

 2025-11-09

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

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

点击免费数据支持

提交您的需求,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.