我正在尝试有条件地将来自两个http请求的数据合并到一个对象中。请考虑这些对象。
str
如果两个对象之间的vId匹配,我想将pDetails对象推送到vehicles数组中匹配对象的新数组中。我正在使用Angular 5,TS并将Lodash添加到我的项目中。我正忙着讨论如何遍历嵌套数组。我是JS的新手,还不熟悉api。 TS,ES6,Angular或Lodash中是否有可能使这更容易的东西?
这是我到目前为止最接近的地方:
vehicles: [
{
vId: 1,
color: 'green',
passengers: [
{
name: 'Joe',
age: 22
},
{
name: 'Jack',
age: 32
}
]
}
more vehicles....]
pDetails: [
{
vId: 1,
detail: tall
},
{
vId: 1,
detail: 'fat'
},
{
vId 2,
detail: 'sad'
} more details.....
]
这成功地遍历了车辆阵列,但我想我想做的是整合每个v.passenger对象,并且每个对pDetails数组进行搜索,复制匹配,推送到临时数组,然后分配给v .passengers。我仍然无法弄清楚如何迭代每辆车的乘客阵列。
答案 0 :(得分:0)
使用rxjs函数可以帮助您解决这类问题。
以下是使用combineLatest获取详细信息的车辆代码建议(演示代码,未经测试):
// The first observable pushed value would be
// and array of the pushed values by the Observables
combineLatest(this.getVehiclesDetails(),this.getVehicles())
.pipe(
// Using the returned values, you could transform them to what you want
map(([vehicules, details]) =>
// Here we transform our vehicules array to vehiculesWithDetail array
vehicules.map(vehicule => {
// We get the detail for the processed vehicule
const detail = details.find(d => d.vdId == vehicule.vdId);
// We merge the two objects in one
return Object.Assign(vehicule, detail);
})
)
)