Javascript 将属性从一个数组添加到具有相同键的另一个数组中
我没有用文字来解释这个问题,而是在下面做了一个快速的视觉表示 假设我有以下数组:Javascript 将属性从一个数组添加到具有相同键的另一个数组中,javascript,arrays,Javascript,Arrays,我没有用文字来解释这个问题,而是在下面做了一个快速的视觉表示 假设我有以下数组: let arr1 = [ { id: 1, someKey: someValue }, { id: 2, someKey: someValue }, ] 和另一个阵列: let arr2 = [ { id: 1, numberOfItems: 10 }, { id: 2, numberOfItems: 20 }, ]
let arr1 = [
{
id: 1,
someKey: someValue
},
{
id: 2,
someKey: someValue
},
]
和另一个阵列:
let arr2 = [
{
id: 1,
numberOfItems: 10
},
{
id: 2,
numberOfItems: 20
},
]
如何创建以下数组
let result = [
{
id: 1,
someKey: someValue,
numberOfItems: 10
},
{
id: 2,
someKey: someValue,
numberOfItems: 10
},
]
如您所见,两个数组都具有相同的id
值。我想从第二个数组中获取numberOfItems:10
,并将其放置在同一id下的第一个数组中
注意:这两个ID完全不同,具有不同的属性和长度。唯一的相似之处是
id
您可以首先创建一个以id为键的地图,然后组合对象,这将解决O(n)中的问题:
让arr1=[
{
id:1,
关键人物:3
},
{
id:2,
关键人物:6
},
];
设arr2=[
{
id:1,
项目数目:10
},
{
id:2,
项目数目:20
},
];
让arr2Map=arr2.reduce((acc,curr)=>{
acc[当前id]=当前
返回acc;
}, {});
让combined=arr1.map(d=>Object.assign(d,arr2Map[d.id]);
控制台日志(组合)代码>
让arr1=[
{
id:1,
关键人物:3
},
{
id:2,
关键人物:6
},
];
设arr2=[
{
id:1,
项目数目:10
},
{
id:2,
项目数目:20
},
];
设idToNumberOfItem={};
arr2.forEach({id,numberOfItems})=>idToNumberOfItem[id]=numberOfItems)
arr1.forEach((item)=>item['numberOfItems']=idToNumberOfItem[item.id])
控制台日志(arr1)代码>两个数组的长度是否相同?同样的内容?相同的项目顺序?不,除了id