json - 将两个 API 响应组合成一个对象,无需映射/循环
问题描述
我处于必须覆盖客户端上糟糕的 API 实体关联的情况:
简化的例子是:
/api/cars
[
{
"carId": 1,
"name": "BMW"
},
{
"carId": 2,
"name": "Citroen"
}
]
/api/carcolors
[
{
"color": "blue",
"carId": 1
},
{
"color": "red",
"carId": 2
}
]
我需要得到一个数据对象,比如
class Car {
String id;
String name;
String color;
}
有没有人知道比调用 /cars 更好的方法来处理这个问题,它创建颜色为 null 的 Car 对象列表,然后执行请求 /carcolors,获取 CarColor 对象,然后映射/循环以将颜色添加到汽车模型。
解决方案
您将不得不循环,但您可以通过使用临时键来避免嵌套循环:Map
carId
let cars = [{"carId": 1,"name": "BMW"},{"carId": 2,"name": "Citroen"}]
let colors = [{"color": "blue","carId": 1},{"color": "red","carId": 2}]
let carmap = new Map(cars.map(car => [car.carId, {...car}]));
colors.forEach(color => Object.assign(carmap.get(color.carId), color));
let result = Array.from(carmap.values())
console.log(result);
推荐阅读
- javascript - 计算 JavaScript 对象中每个类别中的项目数
- loops - 哈斯克尔的骑士之旅获得了一个循环
- python - 是否可以更改类实例的方法类型注释?
- algorithm - 将图上的点转换为无向图的有效方法
- javascript - 谷歌地图(javascript API)检测倾斜可用
- apache-spark - 在单台机器上在 Jupyter notebook 中测试 Pyspark 时出现 Py4JJavaError
- javascript - 如何在不知道其子对象路径的情况下设置父对象的值?
- jquery - jQuery .hasClass() 在 each() 上的 children() 不工作“不是一个函数”
- ssh - 使用 tcl/expect 准备隧道
- python - python 3.9 中的类型注释约束(`ValueRange`/`MinLen` 等)在哪里?