Javascript 如何合并2个不同的对象数组并返回匹配项和非匹配项?

Javascript 如何合并2个不同的对象数组并返回匹配项和非匹配项?,javascript,Javascript,我有两个不同的数组要合并 var arr1=[{cardId:1001,knowCnt:0,dknowCnt:1},{cardId:1002,knowCnt:0,dknowCnt:2},{cardId:1003,knowCnt:1,dknowCnt:3}]; var arr2=[ { 卡迪德:1001, videoId:“l4LjOvERDoM”, 开始秒:5, 完秒:10,, }, { 卡迪德:1002, videoId:“jsfnf3if3w”, 开始秒:5, 完秒:10,, }, { 卡迪

我有两个不同的数组要合并

var arr1=[{cardId:1001,knowCnt:0,dknowCnt:1},{cardId:1002,knowCnt:0,dknowCnt:2},{cardId:1003,knowCnt:1,dknowCnt:3}];
var arr2=[
{
卡迪德:1001,
videoId:“l4LjOvERDoM”,
开始秒:5,
完秒:10,,
},
{
卡迪德:1002,
videoId:“jsfnf3if3w”,
开始秒:5,
完秒:10,,
},
{
卡迪德:1003,
videoId:“dc0q0H9CO9k”,
开始秒:5,
完秒:10,,
},
{
卡迪德:1004,
videoId:“kdZe5ZjfNX4”,
开始秒:5,
完秒:10,,
}
];
这两个阵列具有匹配的cardId,我希望将arr1中的knowCnt和dknowCnt添加到
arr2
中各自的cardId属性中。可能的解决方案是:

这很有效,但只返回匹配的项。如何返回一个既包含匹配项(如上所述更新)又包含arr2中剩余项的数组。换句话说,生成的数组看起来像arr2,但有3项是从arr1更新的?注意:数组的顺序可能不匹配


谢谢

这里没有什么复杂的东西,只需压缩数组并按所需的键制作一个对象。。。非常简单的代码

const res = [...arr1, ...arr2].reduce((agg, v) => {
   agg[v.cardId] = Object.assign(agg[v.cardId] || {}, v)   
   return agg
}, {})

console.log(res)

您可以通过更新know
cardId
获取
Map
并过滤
array2

var array1=[{cardId:1001,knowCnt:0,dknowCnt:1},{cardId:1002,knowCnt:0,dknowCnt:2},{cardId:1003,knowCnt:1,dknowCnt:3}],
array2=[{cardId:1001,videoId:“l4LjOvERDoM”,开始秒:5,结束秒:10},{cardId:1002,videoId:“JSFNF3IF3W”,开始秒:5,结束秒:10},{cardId:1003,videoId:“dc0q0H9CO9k”,开始秒:5,结束秒:10},{cardId:1004,videoId:“KDZE5ZJFN”,开始秒:5,结束秒:10},
references=array1.reduce((m,o)=>m.set(o.cardId,o),新映射),
filtered2=array2.filter(o=>{
如果(!references.has(o.cardd))返回true;
Object.assign(references.get(o.cardd),o);
});
控制台日志(array1);
控制台日志(filtered2)

作为控制台包装{max height:100%!important;top:0;}
请同时添加结果。匹配对象会发生什么情况?
const res = [...arr1, ...arr2].reduce((agg, v) => {
   agg[v.cardId] = Object.assign(agg[v.cardId] || {}, v)   
   return agg
}, {})

console.log(res)