在javascript中组合两个不同大小的对象数组

在javascript中组合两个不同大小的对象数组,javascript,ecmascript-6,Javascript,Ecmascript 6,我有两个不同大小的阵列,就像这样 [{ id: 1, name: 'One', contacts: [] }, { id: 2, name: 'Two', contacts: [] }, { id: 3, name: 'Three', contacts: [] }, { id: 4, name: 'Four', contacts: [] }] [{ id: 1, name: 'One', contacts: [{ id: 100, name: "C1" }, { id: 101,

我有两个不同大小的阵列,就像这样

[{ id: 1, name: 'One', contacts: [] }, 
 { id: 2, name: 'Two', contacts: [] }, 
 { id: 3, name: 'Three', contacts: [] }, 
 { id: 4, name: 'Four', contacts: [] }]

[{ id: 1, name: 'One', contacts: [{ id: 100, name: "C1" }, { id: 101, name: "C2" }] },
 { id: 3, name: 'Three', contacts: [{ id: 120, name: "C1" }, { id: 121, name: "C2" }] },
 { id: 5, name: 'Five', contacts: [{ id: 420, name: "F1" }, { id: 421, name: "F2" }] }];
我尝试了以下javascript代码

const mergeArray = (source, merge, by) => source.map(item => ({
    ...item,
    ...(merge.find(i => i[by] === item[by]) || {}),
    }));

    output =  mergeArray(this.oldArray1,this.oldArray2,'id');
它以

[{ id: 1, name: 'One', contacts: [{ id: 100, name: "C1" }, { id: 101, name: "C2" }] }, 
{ id: 2, name: 'Two', contacts: [] }
{ id: 3, name: 'Three', contacts: [{ id: 120, name: "C1" }, { id: 121, name: "C2" }] }]
[{ id: 1, name: 'One', contacts: [{ id: 100, name: "C1" }, { id: 101, name: "C2" }] }, 
{ id: 2, name: 'Two', contacts: [] }
{ id: 3, name: 'Three', contacts: [{ id: 120, name: "C1" }, { id: 121, name: "C2" }] },
{ id: 4, name: 'Four', contacts: [] }
{ id: 5, name: 'Five', contacts: [{ id: 420, name: "F1" }, { id: 421, name: "F2" }] }]
但是像这样的期望输出

[{ id: 1, name: 'One', contacts: [{ id: 100, name: "C1" }, { id: 101, name: "C2" }] }, 
{ id: 2, name: 'Two', contacts: [] }
{ id: 3, name: 'Three', contacts: [{ id: 120, name: "C1" }, { id: 121, name: "C2" }] }]
[{ id: 1, name: 'One', contacts: [{ id: 100, name: "C1" }, { id: 101, name: "C2" }] }, 
{ id: 2, name: 'Two', contacts: [] }
{ id: 3, name: 'Three', contacts: [{ id: 120, name: "C1" }, { id: 121, name: "C2" }] },
{ id: 4, name: 'Four', contacts: [] }
{ id: 5, name: 'Five', contacts: [{ id: 420, name: "F1" }, { id: 421, name: "F2" }] }]

您可以在一个数组中收集数组,或者简单地合并数组,然后在
id
位于结果数组中时通过签入减少该数组。如果没有将对象添加到结果数组中,或者如果存在,则使用acutal数据扩展
contacts

var array1=[{id:1,姓名:“一”,联系人:[]},{id:2,姓名:“两”,联系人:[]},{id:3,姓名:“三”,联系人:[]},{id:4,姓名:“四”,联系人:[]},
array2=[{id:1,姓名:'1',联系人:[{id:100,姓名:'C1'},{id:101,姓名:'C2'}]},{id:3,姓名:'3',联系人:[{id:120,姓名:'C1'},{id:121,姓名:'C2'}]},{id:5,姓名:'5',联系人:[{id:420,姓名:'F1'},{id:421,姓名:'F2}]],
合并=[array1,array2]。减少((r,a)=>{
a、 forEach(o=>{
var object=r.find(({id})=>id==o.id);
如果(!对象){
返回r.push(o);
}
对象。触点。推送(…o触点);
});
返回r;
}, []);
console.log(合并)

.as控制台包装{max height:100%!important;top:0;}
您尝试过什么吗?抱歉:您的问题是:不是代码编写服务。我们将帮助调试您的代码。好的,您有什么问题吗?在你说“我该怎么做?”之前,你至少应该自己尝试一下。循环你的对象并执行
$。扩展({},obj1.contacts,obj2.contacts)
提示:你可以创建从名称到对象的映射,并合并具有相同名称的对象。