如何在JavaScript中映射两个长度不同的对象数组的属性

如何在JavaScript中映射两个长度不同的对象数组的属性,javascript,arrays,object,Javascript,Arrays,Object,作为一个新手,我发现了这个我不知道如何解决的问题 给定两个不同长度的数组,我想将arr2的key total值映射到arr1的key total值上,如下所示: arr1 = [{id: 1, grpId: 'x', total: null}, {id: 2, grpId: 'x', total: null}, {id: 3, grpId: 'x', total: null}, {id: 4, grpId: 'y', total: null},

作为一个新手,我发现了这个我不知道如何解决的问题

给定两个不同长度的数组,我想将
arr2
的key total值映射到
arr1
的key total值上,如下所示:

 arr1 = [{id: 1, grpId: 'x', total: null},
        {id: 2, grpId: 'x', total: null},
        {id: 3, grpId: 'x', total: null},
        {id: 4, grpId: 'y', total: null},
        {id: 5, grpId: 'y', total: null}];

 arr2 = [{id: 1, grpId: 'x', total: 3},
        {id: 2, grpId: 'y', total: 2}];
我需要以下结果:

 arr1 = [{id: 1, grpId: 'x', total: 3},
        {id: 2, grpId: 'x', total: 3},
        {id: 3, grpId: 'x', total: 3},
        {id: 4, grpId: 'y', total: 2},
        {id: 5, grpId: 'y', total: 2}];
试试这个:

const arr1=[{id:1,grpId:'x',total:null},
{id:2,grpId:'x',total:null},
{id:3,grpId:'x',total:null},
{id:4,grpId:'y',total:null},
{id:5,grpId:'y',total:null}];
常量arr2=[{id:1,grpId:'x',总计:3},
{id:2,grpId:'y',总计:2}];
常量输出=arr1.map(条目=>({
进入
总计:arr2.find(a2=>a2.grpId==entry.grpId)。总计
}));
控制台日志(输出)请尝试以下操作:

const arr1=[{id:1,grpId:'x',total:null},
{id:2,grpId:'x',total:null},
{id:3,grpId:'x',total:null},
{id:4,grpId:'y',total:null},
{id:5,grpId:'y',total:null}];
常量arr2=[{id:1,grpId:'x',总计:3},
{id:2,grpId:'y',总计:2}];
常量输出=arr1.map(条目=>({
进入
总计:arr2.find(a2=>a2.grpId==entry.grpId)。总计
}));
控制台日志(输出)
使用
Array.map()
循环通过
arr1
,并在该循环内循环通过
arr2
,并分配
总计值:

让arr1=[{id:1,grpId:x,total:null},{id:2,grpId:x,total:null},{id:3,grpId:x,total:null},{id:4,grpId:y,total:null},{id:5,grpId:y,total:null}],arrr2=[{id:1,grpId:x,total:3},{id:2,grpId:y,total:2}];
让res=arr1.map(el1=>{
arr2.forEach(el2=>{
if(el2.grpId==el1.grpId){
el1.total=el2.total
}
})
返回el1
})
console.log(res)
使用
Array.map()
循环
arr1
,并在该循环内循环
arr2
,并分配
总计值:

让arr1=[{id:1,grpId:x,total:null},{id:2,grpId:x,total:null},{id:3,grpId:x,total:null},{id:4,grpId:y,total:null},{id:5,grpId:y,total:null}],arrr2=[{id:1,grpId:x,total:3},{id:2,grpId:y,total:2}];
让res=arr1.map(el1=>{
arr2.forEach(el2=>{
if(el2.grpId==el1.grpId){
el1.total=el2.total
}
})
返回el1
})

console.log(res)
arr2
创建一个对象,该对象将
grpId
映射到相应的
total
。然后遍历
arr1
并从该对象复制总计。您尝试过什么吗?关于这类操作有很多问题…从
arr2
创建一个对象,将
grpId
映射到相应的
total
。然后遍历
arr1
并从该对象复制总计。您尝试过什么吗?关于这种操作,有很多问题……最好不要直接指定给
el1
,而是返回一个包含所需值的新对象。否则,最好不要直接指定给
el1
,而是返回一个具有所需值的新对象,这与函数编程中没有副作用的纯函数的思想是背道而驰的。否则,它就违背了函数编程中没有副作用的纯函数的思想(因为
map
是仿效的)