在我的服务文件中的Angular 2应用程序中,我有以下内容。
service.ts
getUserSelections() {
return this.http.get('http://localhost:8080/selection/selections').map((res: Response) => res.json());
}
getSavedSelections() {
let params: URLSearchParams = new URLSearchParams();
params.set('access_token', localStorage.getItem('access_token'));
return this.http.get('http://localhost:8080/interest/user/selections', { search: params }).map((res: Response) => res.json());
}
getUserSelections 返回以下json数组。
[{
"key": "test1",
"val": 1.0
}, {
"key": "test2",
"val": 1.0
}, {
"key": "test3",
"val": 1.0
}]
getSavedSelections 会返回以下内容。
[{
"key": "test2",
"val": 1.0
}, {
"key": "test3",
"val": 1.0
}]
我不需要单独调用这两个服务。一旦我打电话给 getUserSelection ,如果第一次服务成功,我需要一个接一个地调用。然后我想比较这两个json数组,第一个数组包含所有项目,第二个数组包含第一个数组中的一些项目。所以我需要检查第二个数组中包含哪些项目,并将新属性添加为“selected(true或false)”到第一个数组的项目。最终,需要返回一个数组,如下所示。
[{
"key": "test1",
"val": 1.0,
"selected": false
}, {
"key": "test2",
"val": 1.0,
"selected": true
}, {
"key": "test3",
"val": 1.0,
"selected": true
}]
非常感谢任何建议。
答案 0 :(得分:1)
您可以在第一个阵列上使用地图功能。它将返回一个新数组,并在每个项目上调用回调函数。
let result = Array1.map((elem1) => {
elem1.selected = false;
Array2.forEach((elem2) => {
if (elem2.key === elem1.key)
elem1.selected = true;
});
return elem1;
});