如何使用过滤器是三个层次的深度元素

问题描述 投票:0回答:1

我有这样的结构,从服务调用返回:

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"
       }
     ]
      }
    ]
  }    
];
angular filter
1个回答
0
投票

你正在为一个数组你的回应。

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

© www.soinside.com 2019 - 2024. All rights reserved.