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

如何将含嵌套对象的两个数组合并为无重复的单个数组

合并两个对象数组并合并重复键对应的值

给定两个对象数组:

const oldArr = [
  { 'Tomorrow': [{ id: 2 }, { id: 4 }, { id: 3 }] }, 
  { 'Saturday': [{ id: 2 }, { id: 4 }, { id: 3 }] }
]

const newArr = [
  { 'Monday': [{ id: 2 },{ id: 4},{ id: 3 }] }, 
  { 'Tomorrow': [{ id: 1 },{ id: 5 }]}
]

需要将它们合并为无重复键的数组,重复键对应的数组内容要合并,预期结果如下:

[
  { 'Tomorrow': [{ id: 2 }, { id: 4 }, { id: 3 }, { id: 1 }, { id: 5 }] }, 
  { 'Saturday': [{ id: 2 }, { id: 4 }, { id: 3 }] },
  { 'Monday': [{ id: 2 }, { id: 4 }, { id: 3 }] } 
]

解决方案:使用reduce简洁实现

可以通过reduce统一处理合并逻辑,比嵌套循环更简洁易读:

// 合并两个数组为一个大数组,再用reduce处理
const mergedObj = [...oldArr, ...newArr].reduce((acc, curr) => {
  const key = Object.keys(curr)[0];
  // 存在相同键则合并数组,不存在则直接添加
  acc[key] = acc[key] ? [...acc[key], ...curr[key]] : curr[key];
  return acc;
}, {});

// 将处理后的对象转换为目标数组格式
const result = Object.entries(mergedObj).map(([key, value]) => ({ [key]: value }));

console.log(result);

逻辑说明

  1. 先用扩展运算符[...oldArr, ...newArr]把两个输入数组合并成一个数组;
  2. 用reduce遍历合并后的数组,维护一个以日期为键的累加器对象,存储对应合并后的id数组;
  3. 遍历每个元素时,取出当前对象的唯一键,判断累加器中是否存在该键:存在则追加数组内容,不存在则直接赋值;
  4. 最后用Object.entries和map把累加器对象转换回目标的对象数组格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:09:21