我试图了解如何将两个对象数组合并为一个对象数组,并将两个数组中的特定键值匹配到一起
我有一个例子,说明我的目标是什么,但没有一个片段,因为我不知道如何开始和做它
两个对象
const objA = [
{
"id": "DEMO-1",
"siteId": "01",
},
{
"id": "DEMO-2",
"siteId": "02",
},
{
"id": "DEMO-3",
"siteId": "05",
},
{
"id": "DEMO-4",
"siteId": null,
},
{
"id": "DEMO-5",
"siteId": null,
},
{
"id": "DEMO-6",
"siteId": "05",
},
{
"id": "DEMO-7",
"siteId": "02",
},
];
const objB = [
{ siteId: '01', principalInvestigator: { name: 'Jake' } },
{ siteId: '02', principalInvestigator: { name: 'Claudia' } },
{ siteId: '05', principalInvestigator: null },
];当我们在同一个siteId上有匹配时,这两个对象必须组合在一起。
结果应该是一个新的对象数组,情况如下:
我们有一个匹配的objB.principalInvestigator
principalInvestigator: nullconst result = [
{
"id": "DEMO-1",
"siteId": "01",
"principalInvestigator": { name: 'Jake' }
},
{
"id": "DEMO-2",
"siteId": "02",
"principalInvestigator": { name: 'Claudia' }
},
{
"id": "DEMO-3",
"siteId": "05",
"principalInvestigator": null
},
{
"id": "DEMO-4",
"siteId": null,
"principalInvestigator": null
},
{
"id": "DEMO-5",
"siteId": null,
"principalInvestigator": null
},
{
"id": "DEMO-6",
"siteId": "05",
"principalInvestigator": null
},
{
"id": "DEMO-7",
"siteId": "02",
"principalInvestigator": { name: 'Claudia' }
},
]发布于 2022-10-17 08:55:19
您可以为第二个对象(按siteId键)创建一个查找映射,然后将第一个数组映射到扩展对象,以便从映射中查找principalInvestigator数据:
const objA = [{"id": "DEMO-1","siteId": "01",},{"id": "DEMO-2","siteId": "02",},{"id": "DEMO-3","siteId": "05",},{"id": "DEMO-4","siteId": null,},{"id": "DEMO-5","siteId": null,},{"id": "DEMO-6","siteId": "05",},{"id": "DEMO-7","siteId": "02",},];
const objB = [
{ siteId: '01', principalInvestigator: { name: 'Jake' } },
{ siteId: '02', principalInvestigator: { name: 'Claudia' } },
{ siteId: '05', principalInvestigator: null },
];
const map = new Map(objB.map(o => [o.siteId, o.principalInvestigator]));
const result = objA.map(o => ({...o, prinicalInvestigator: map.get(o.siteId) ?? null}));
console.log(result);
注意,如果第一个数组中的多个对象具有相同的siteId,那么它们的新prinicalInvestigator属性将引用同一个对象。
发布于 2022-10-17 09:30:23
对于objA中的每个objA,使用find在objB中定位相应的对象
result = objA.map(a => ({...a,
...(objB.find(b => b.siteId === a.siteId) ?? {principalInvestigator: null})
}))https://stackoverflow.com/questions/74094682
复制相似问题