【问题标题】:How do I use a filter for an element that is three levels deep如何对三层深的元素使用过滤器
【发布时间】:2019-02-12 01:00:56
【问题描述】:

我有一个从服务调用返回的类似结构:

var office = [
  {
    "Name": "office 1",
    "address": [
      {
        "address1": "addres line 1",
        "LocationOptions": [
          {
            "WheelChairAccessible": "Yes",
        "OpenToPublic": "Open"
         }
        ]
      },
    {
      "address1": "addres line 1",
      "LocationOptions": [
        {
          "WheelChairAccessible": "No",
      "OpenToPublic": "Closed"
        }
      ]
     },
    ]
   },
     "Name": "office 2",
     "address": [
       {
         "address1": "addres line 1",
         "LocationOptions": [
       {
              "WheelChairAccessible": "No",
          "OpenToPublic": "Closed"
           }
     ]
        }
     ]
   }
];

我一直在尝试应用过滤器,以便我可以在服务调用中以我正在寻找的格式获取数据,但无法让过滤器在多个级别上工作。

我尝试了以下方法来分解到我想要过滤我正在寻找的数据的位置:

this.fileteraddress = this.ds.serviceCall(detailParameters)
      .pipe( 
        filter(res => 
          res.Address.map( res => 
            res2.LocationOptions.filter( res3 =>
              res3.OpenToPublic != "Open")
          ) 
        )
      .subscribe (res =>
        this.fileteraddress = res
      );

我也尝试使用地图功能,但无法正确应用过滤器。

我想让过滤器正常工作,所以我可以这样取回数据:

var Open Offices = [
  {
    "Name": "office 1",
    "address": [
      {
        "address1": "addres line 1",
    "LocationOptions": [
           {
        "WheelChairAccessible": "Yes",
            "OpenToPublic": "Open"
       }
     ]
      }
    ]
  }    
];

【问题讨论】:

  • LocationOptions 是一个数组,一个地址可以有多个位置选项吗?
  • 是的,每个地址可以有多个位置选项。

标签: angular filter


【解决方案1】:

您将收到作为数组的响应。

this.ds.serviceCall(detailParameters).pipe(
   map(t=> 
   t.filter((t: any)=> {    
    return t.address.filter((a:any) => {
      return a.LocationOptions.filter((loc:any) => {
        return loc.OpenToPublic === 'Open';
      }).length > 0;
    }).length > 0;

    return false;
  }
  ))).subscribe(t=> this.result = t);
}

这里是 stackblitz,如果你想试试这个。 https://stackblitz.com/edit/angular-xecicg

【讨论】:

  • 我能够在 stackblitz 中看到这项工作,但是当我在我的代码中尝试它时,我出错了 t.filter is not a function。我有什么需要声明的变量调用?
猜你喜欢
  • 2021-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多