Как использовать фильтр для элемента глубиной в три уровня - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть такая структура, возвращенная из сервисного вызова:

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"
       }
     ]
      }
    ]
  }    
];

1 Ответ

0 голосов
/ 11 февраля 2019

Вы получаете свой ответ в виде массива.

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);
}

Вот блик стека, если вы хотите попробовать это.https://stackblitz.com/edit/angular-xecicg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...