Angular 2:填充复选框列表,比较两个列表,并初步检查一些项目

时间:2016-04-19 06:34:52

标签: javascript angular

在我的服务文件中的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
  }]

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

您可以在第一个阵列上使用地图功能。它将返回一个新数组,并在每个项目上调用回调函数。

let result = Array1.map((elem1) => {
  elem1.selected = false;
  Array2.forEach((elem2) => {
    if (elem2.key === elem1.key)
      elem1.selected = true;
  });
  return elem1;
});