Angular2过滤具有一个属性的数组并显示相应的值

时间:2017-03-19 17:34:23

标签: arrays angular

我有一个下拉列表,其中包含我通过服务获得的状态列表。在JSON中,我获得了带有id和label的状态列表。对于前者id:NJ,label:New Jersey。我有来自后端的不同回复,这给了我5个州的身份 - 例如:

"filters": [
              {
                "name": "listedStates",
                "includedCodes": [
                  "AZ",
                  "NJ",
                  "IN",
                  "OH",
                  "WI"
                ]
              }

在下拉列表中填充整个美国州的列表,我正在这样迭代 -

this.addressService.getStates().subscribe(
        (data) => {

            console.log(data);

        if (data) {
            //filter with filters  array
            data.states.forEach(i => {
                console.log(data.states);
                this.newBaseStatesList.push({ 'value': i.id, 'text': i.label });
                console.log(this.newBaseStatesList);
            });

        }


    },
    (error) => {
        //console.log("An error occurred ");


    }
);

现在我的下拉列表已经填充了数组中的所有状态项,而我想在filters数组中提到的下拉列表中只显示5个状态。这里的问题是我从后端得到的响应只有ID不是标签,下拉列表应该包含标签值。因此,我必须以某种方式将这些代码映射到状态数组,以便过滤和填充这5个状态。

我的对象是格式 -

{
    id:NJ,
    label:New Jersey
}

我想检查带有states数组的filters数组中的状态代码并显示相应的标签。现在,整个州都在填充,而不是过滤器数组中提到的5个州。

1 个答案:

答案 0 :(得分:0)

您可以使用以下方式实现

this.filters.forEach((filter)=>{
    filter.includedCodes.forEach((code)=>{
            this.newBaseStatesList.push(_.takeWhile(this.data.states, { 'id': code}))'
            });
    })

注意:我正在使用 Lodash 。 我不确定您的服务为this.data.states返回的语法,因此需要根据示例json

进行处理