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

如何优雅合并存在重叠键的多个JavaScript对象?

问题

现有多个包含重叠键的对象,每个键代表一年中的某一周,对应的值是存储整数测试结果的对象,示例如下:

const ab_tests = { week1: { a: 4, b: 6 }, week2: { a: 0, b: 9 } };
const cd_tests = { week2: { c: 2, d: 5 }, week3: { c: 6, d: 7 } };
const xy_tests = { week1: { x: 1, y: 1 }, week4: { x: 100, y: 123 } };

需要将它们优雅地合并为一个单一对象,包含所有周作为键,对应值为合并后的对象,最终结果如下:

const merged_tests = {
  week1: { a: 4, b: 6, x: 1, y: 1 },
  week2: { a: 0, b: 9, c: 2, d: 5 },
  week3: { c: 6, d: 7 },
  week4: { x: 100, y: 123 },
};
解决方案

方法一:原生JS结合reduce与展开语法

把所有待合并对象放进数组,通过reduce遍历累积结果,对每个周的对象用展开语法合并属性,逻辑清晰且无依赖:

const testObjects = [ab_tests, cd_tests, xy_tests];

const merged_tests = testObjects.reduce((acc, curr) => {
  for (const week in curr) {
    acc[week] = { ...(acc[week] || {}), ...curr[week] };
  }
  return acc;
}, {});

方法二:原生JS结合reduce与Object.assign

和上一种思路一致,用Object.assign替代展开语法完成属性合并:

const testObjects = [ab_tests, cd_tests, xy_tests];

const merged_tests = testObjects.reduce((acc, curr) => {
  for (const week in curr) {
    acc[week] = Object.assign({}, acc[week] || {}, curr[week]);
  }
  return acc;
}, {});

方法三:Lodash的merge函数(项目已引入Lodash时使用)

如果项目依赖Lodash,一行代码即可完成递归合并,简洁高效:

const merged_tests = _.merge({}, ab_tests, cd_tests, xy_tests);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:35:22