首页 > 解决方案 > 将两个 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 对象,然后映射/循环以将颜色添加到汽车模型。

标签: jsonrestoop

解决方案


您将不得不循环,但您可以通过使用临时键来避免嵌套循环:MapcarId

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);


推荐阅读