首页 > 解决方案 > 将 2 个大小不等的 JSON 对象与 ID 组合在一起

问题描述

问题

我想使用 ID 将以下两个 JSON 组合在一起,并获得如下所述的预期结果。我尝试了一些可用的解决方案,但没有一个适用于我的用例。任何建议都会很棒!

尝试做: 如何通过 id 与普通 Javascript (ES6) 合并两个 json 对象值

代码

var json1 = [
   {
      "id":"A123",
      "cost":"5020.67",
      "fruitName":"grapes"
   },
   {
      "id":"A456",
      "cost":"341.30",
      "fruitName":"apple"
   },
   {
      "id":"A789",
      "cost":"3423.04",
      "fruitName":"banana"
   }
];
var json2 = [
   {
      "id":"A123",
      "quantity":"7"
   },
   {
      "id":"A789",
      "quantity":"10"
   },
   {
      "id":"ABCD",
      "quantity":"22"
   }
];

下面是我试过的代码:

var finalResult = [...[json1, json2].reduce((m, a) => (a.forEach(o => m.has(o.id) && Object.assign(m.get(o.id), o) || m.set(o.id, o)), m), new Map).values()];

预期结果:

[
   {
      "id":"A123",
      "cost":"5020.67",
      "fruitName":"grapes",
      "quantity":"7"
   },
   {
      "id":"A456",
      "cost":"341.30",
      "fruitName":"apple"
   },
   {
      "id":"A789",
      "cost":"3423.04",
      "fruitName":"banana",
      "quantity":"10"
   },
   {
      "id":"ABCD",
      "quantity":"22"
   }
]

标签: javascriptjsonnetsuite

解决方案


我认为通过使用 reduce 我可以使它工作。

var finalResult = [...[json1, json2].reduce((m, a) => (a.forEach(o => m.has(o.id) && Object.assign(m.get(o.id), o) || m.set(o.id, o)), m), new Map).values()];

推荐阅读