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

合并同键对象:如何合并两组结构不同的对象数组?

合并两个对象数组,对应索引属性合并

嘿,我完全get到你的需求了——要把两组对象数组按索引对应合并,有对应元素的就把属性整合到一起,长数组里多出来的元素直接保留原结构对吧?这在JavaScript里用简单的数组方法就能实现,我给你两种方案参考:

方案一:已知其中一个数组更长(比如arr1比arr2长)

如果确定arr1是长度更长的那组,直接用map遍历它,结合对象展开运算符...合并对应索引的对象就行:

// 定义你的两个数组
const arr1 = [
  { 'school': {}, 'district': {}, 'children': {} },
  { 'school': {}, 'district': {}, 'children': {} },
  { 'school': {}, 'district': {}, 'children': {} }
];

const arr2 = [
  { 'teacher': {}, 'name': {}, 'class': {} },
  { 'teacher': {}, 'name': {}, 'class': {} }
];

// 执行合并
const mergedArray = arr1.map((item, index) => {
  // 若arr2对应位置有元素则合并,无则直接返回原item
  return { ...item, ...arr2[index] };
});

console.log(mergedArray);

逻辑说明:

  • arr1.map()会遍历每一个元素,同时拿到当前索引index
  • 对象展开运算符...会把两个对象的属性整合到新对象里,如果有重复属性(你这里没有),后面的会覆盖前面的
  • 当index超过arr2的长度时,arr2[index]是undefined,展开undefined不会对原对象造成影响,所以直接保留arr1的原元素

方案二:不确定哪个数组更长

如果不确定哪组数组更长,我们可以先取两者的最大长度,再基于这个长度生成新数组:

const arr1 = [/* 你的第一组数组 */];
const arr2 = [/* 你的第二组数组 */];

const maxLength = Math.max(arr1.length, arr2.length);
const mergedArray = Array.from({ length: maxLength }, (_, index) => {
  // 合并对应索引的两个对象,不存在的对象会被处理为空对象,不影响结果
  return { ...arr1[index] || {}, ...arr2[index] || {} };
});

逻辑说明:

  • Math.max(arr1.length, arr2.length)拿到两个数组中更长的那个长度
  • Array.from({ length: maxLength })创建一个对应长度的空数组,然后遍历每个索引
  • arr1[index] || {}确保如果当前索引在arr1中不存在,会用空对象代替,避免展开undefined的潜在问题

两种方案都能得到你想要的结果:前两个元素合并了两组的所有属性,第三个元素保留arr1的原结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:30:11