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

如何将对象数组合并为包含所有键与去重值的通用对象?

合并对象数组为含去重合并数组的通用对象

问题描述

现有对象数组arr,需要合并为一个通用对象resultObj:

  • 包含原数组中所有对象的键
  • 每个键对应的数组值,是所有原对象中该键数组的去重合并结果

示例输入输出:

// 输入数组
let arr = [
  { "11": [19,20], "12": [21, 22, 24], "13": [25, 27]},
  { "11": [19,30], "12": [22, 23], "13": [25, 26, 27], "14": [28, 29]},
  { "11": [19,20,30], "12": [21, 23], "13": [26], "15": [31, 32, 33]}
]

// 期望输出
let resultObj = {"11": [19,20,30], "12": [21, 22, 23, 24], "13": [25, 26, 27], "14": [28, 29], "15": [31, 32, 33]}

解决方案

使用Array.prototype.reduce遍历数组累加结果,结合Set实现数组去重:

const arr = [
  { "11": [19, 20], "12": [21, 22, 24], "13": [25, 27] },
  { "11": [19, 30], "12": [22, 23], "13": [25, 26, 27], "14": [28, 29] },
  { "11": [19, 20, 30], "12": [21, 23], "13": [26], "15": [31, 32, 33] }
];

const resultObj = arr.reduce((acc, current) => {
  // 遍历当前对象的所有键值对
  for (const [key, values] of Object.entries(current)) {
    // 合并已有数组与当前数组,去重后赋值
    acc[key] = [...new Set([...(acc[key] || []), ...values])];
  }
  return acc;
}, {});

console.log(resultObj);

代码说明

  1. reduce累加器:初始化空对象{}作为结果容器,遍历数组中的每个对象
  2. 遍历键值对:用Object.entries()获取当前对象的键和对应数组
  3. 合并与去重:
    • 若结果容器中已有该键,取出已有数组;若无则用空数组替代
    • 合并已有数组与当前对象的数组,通过Set自动去重
    • 用扩展运算符[...Set]将去重后的Set转回数组,保持元素插入顺序
  4. 返回结果:遍历完成后,累加器即为目标对象

内容的提问来源于stack exchange,提问作者tako-sphynx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:48:20