合并同键对象:如何合并两组结构不同的对象数组?
合并两个对象数组,对应索引属性合并
嘿,我完全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
相关产品推荐
相关产品推荐

