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

如何将两个不同对象数组的属性合并为单个对象数组?

嘿,我来帮你搞定两个对象数组合并的问题!根据你的需求,我分两种常见场景给你具体实现方案:


先明确两个目标数组

首先咱们把两个数组的定义理清楚:

  1. 你已有的基础套餐数组(先叫它existingPlans):
const existingPlans = [
  { id: 1, name: 'Monthly Plan', cycle: 1, fees: 1000 },
  { id: 2, name: 'Yearly Plan', cycle: 12, fees: 10000 },
  { id: 3, name: 'Two Months Plan', cycle: 2, fees: 1500 },
  { id: 4, name: 'Three Months Plan', cycle: 3, fees: 2500 },
  { id: 5, name: 'Four Months Plan', cycle: 4, fees: 3000 }
];
  1. 你通过for循环生成的新套餐数组(叫它newPlans,注意要确保最终生成的是对象数组,比如循环里用push把每个新对象加入数组)

场景1:直接合并(无重复对象)

如果两个数组里的对象都是唯一的(没有相同id的重复项),用两种简单方法就能搞定:

方法1:ES6扩展运算符(推荐,写法简洁)

const mergedPlans = [...existingPlans, ...newPlans];

方法2:concat()方法(传统写法)

const mergedPlans = existingPlans.concat(newPlans);

这两种方法都会生成一个新数组,包含两个原数组的所有对象,不会修改原数组本身。


场景2:按id合并重复对象的属性

如果两个数组里存在相同id的对象,需要把它们的属性合并(比如用新数组的属性覆盖旧数组的,或者合并新增属性),可以用reduce配合对象映射来实现:

// 第一步:把基础数组转成以id为键的映射对象,方便快速查找
const plansMap = existingPlans.reduce((map, plan) => {
  map[plan.id] = plan;
  return map;
}, {});

// 第二步:遍历新数组,合并属性到映射对象里
newPlans.forEach(plan => {
  if (plansMap[plan.id]) {
    // 如果id已存在,就合并属性(新数组的属性会覆盖旧数组的同名属性)
    plansMap[plan.id] = { ...plansMap[plan.id], ...plan };
  } else {
    // 如果id不存在,直接添加新对象
    plansMap[plan.id] = plan;
  }
});

// 第三步:把映射对象转回数组
const mergedPlans = Object.values(plansMap);

这样处理后,最终的mergedPlans会保留所有唯一id的对象,重复id的对象会自动合并属性(新数组的属性优先级更高)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:25:12