javascript - 将 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"
}
]
解决方案
我认为通过使用 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()];
推荐阅读
- android - Android 管理设备配置失败
- android - Flutter - firebase 动态链接预览图像在某些应用程序中旋转
- reactjs - 尝试下载 PDF 并使用 express 设置文件名
- openstreetmap - 从开放的街道地图数据库中提取数据
- java - 未指定大小的 Android ThumbnailUtils.createVideoThumbnail 在 API 级别 29 中已弃用
- php - 使用 Curl 调用 API
- loopback4 - 为什么默认环回 4,当我创建环回 4 默认 REST CRUD 控制器时不支持多次插入?
- python - 有没有办法解决 Django 项目中的操作系统错误
- javascript - Rxjs 使用 first() 和 timer()
- laravel - 未找到错误列,但我没有声明该列?