You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并具有重复键值对的JavaScript对象数组?

合并对象数组中重复Title的项

嘿,我来帮你搞定这个合并需求!你之前用.map()只是完成了结构转换,但要合并相同Title的项,咱们得用Array.reduce()方法来做分组合并,这是处理这类聚合需求的绝佳工具。

实现代码

直接上能得到你想要结果的代码:

var doctypes = [
  { "System": { "Title": "FIS NetImage" }, "Title": "Notices" },
  { "System": { "Title": "OmniView" }, "Title": "Notices" },
  { "System": { "Title": "Nautilus" }, "Title": "Reports" },
  { "System": { "Title": "FIS NetImage" }, "Title": "Statements" }
];

// 用reduce分组合并
var mergedDocTypes = doctypes.reduce((acc, item) => {
  // 检查当前Title是否已经在累加器中存在
  if (acc[item.Title]) {
    // 如果存在,把当前的System对象push到对应的System数组里
    acc[item.Title].System.push({ Title: item.System.Title });
  } else {
    // 如果不存在,新建一个条目存入累加器
    acc[item.Title] = {
      Title: item.Title,
      System: [{ Title: item.System.Title }]
    };
  }
  return acc;
}, {});

// 把累加器的对象值转换成数组,就是最终结果
var finalResult = Object.values(mergedDocTypes);
console.log(finalResult);

代码解释

  • reduce()的第一个参数是回调函数,第二个参数是初始值(这里是一个空对象{},用来存储分组后的结果)。
  • 遍历每一项时,先判断当前Title是否已经作为键存在于累加器中:
    • 存在的话,就把当前项的System.Title包装成对象,追加到对应条目的System数组里。
    • 不存在的话,就创建一个新的对象,包含当前Title和初始的System数组,存入累加器。
  • 最后用Object.values()把累加器这个对象的所有值提取出来,转换成你想要的数组格式。

运行这段代码后,输出就和你给出的DESIRED OUTCOME完全一致啦!

内容的提问来源于stack exchange,提问作者cfoster5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:47:21