JavaScript合并同键对象需按“识别键→分组→合并字段”三步处理:对数组属性用concat或展开运算符聚合,对tags等去重数组先flat再Set,非数组字段按业务逻辑选取,嵌套结构避免扁平化,异构数据需统一提取键函数。

JavaScript 中合并具有相同键的多个对象,关键不是简单覆盖或浅拷贝,而是按需“识别键 → 分组 → 合并对应字段”。不同结构要用不同策略,不能一招通吃。
按指定键(如 id、categoryId)分组合并
适用于数组中多个对象共享同一标识字段(如 categoryId),需把它们归为一组,并聚合其数组属性(如 addons)。
- 用
reduce构建以键为索引的临时 Map:遍历数组,对每个对象提取键值,若该键已存在,则合并目标字段(如addons数组);否则新建条目 - 合并数组时用
concat或展开运算符[...acc[key].addons, ...curr.addons],避免直接赋值覆盖 - 最后用
Object.values()提取结果数组
合并同名数组属性(如 tags、roles)
当多个对象都有 tags、roles 这类数组字段,想聚合成去重后的总数组,重点在“提取→扁平→去重→重组”。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- 先用
map提取所有对象的tags,得到[[a,b], [c], [b,d]] - 再用
flat()扁平成[a,b,c,b,d],接着用[...new Set(...)]去重 - 非数组字段(如
name)可取第一个对象的值,或按业务逻辑选(如取最长、最新时间等)
深度合并嵌套结构(保留层级不扁平)
如果对象含嵌套数组(如 permissions: [{action:"read"}, {action:"write"}]),且你希望完整保留每个子项而非合并元素内容,就不要 flat()。
- 直接用
reduce((a, b) => a.concat(b.permissions), [])或[].concat(...items.map(i => i.permissions)) - 若字段可能不存在或非数组,加判断:
Array.isArray(obj.permissions) ? obj.permissions : [] - 对非数组字段(如字符串、数字),可用
Object.assign或展开运算符,但注意浅拷贝限制
处理异构数据(键位置不固定)
有些对象的匹配键藏在不同层级(如一个在顶层 key,另一个在 confidential.key),需统一提取逻辑。
- 写一个通用提取函数,例如
getKey(obj) = obj.key || obj.confidential?.key - 在
reduce的累加器中,始终用这个函数获取键值,确保分组一致性 - 合并时区分字段类型:数组追加、字符串/数字按需取较新或较全、对象递归合并(可用简易 deepMerge)
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










