首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JS reduce将两个objets数组合并到一个对象数组中,其中一个特定的键/值匹配

如何使用JS reduce将两个objets数组合并到一个对象数组中,其中一个特定的键/值匹配
EN

Stack Overflow用户
提问于 2022-10-17 08:47:42
回答 2查看 37关注 0票数 0

我试图了解如何将两个对象数组合并为一个对象数组,并将两个数组中的特定键值匹配到一起

我有一个例子,说明我的目标是什么,但没有一个片段,因为我不知道如何开始和做它

两个对象

代码语言:javascript
复制
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

  • there,结果是objA +是不匹配的,然后添加principalInvestigator: null

代码语言:javascript
复制
const 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' }
  },
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-17 08:55:19

您可以为第二个对象(按siteId键)创建一个查找映射,然后将第一个数组映射到扩展对象,以便从映射中查找principalInvestigator数据:

代码语言:javascript
复制
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属性将引用同一个对象。

票数 2
EN

Stack Overflow用户

发布于 2022-10-17 09:30:23

对于objA中的每个objA,使用findobjB中定位相应的对象

代码语言:javascript
复制
result = objA.map(a => ({...a,
    ...(objB.find(b => b.siteId === a.siteId) ?? {principalInvestigator: null})
}))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74094682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档