Использование фильтра и карты в трубе, чтобы уменьшить набор - PullRequest
1 голос
/ 14 июня 2019

Просто начал работать над RxJS и пытался обернуть мою голову вокруг filter.https://rxjs -dev.firebaseapp.com / api / operator / filter

Судя по всему, выяснить особо нечего, я знаю?: S

Это то, что у меня есть -

declare interface App {
  id: string;
  bId: string;
  account: string;
  title: string;
  platform: string;
  isLive: boolean;
}
public allApps: Observable<App[]>;

this.allApps = this.httpClient.get(`${UtilitiesService.APIRoot}/globals/apps`).pipe(
      map( response => response as App[] )
    );

Этот get/pipe/map возвращает мне объект и правильно переводит его в массив App[].Пока никаких проблем!

Теперь я бы хотел filter из bid !== null и иметь только допустимые значения в this.allApps.Поэтому я «попытался» передать вывод map в filter следующим образом -

this.allApps = this.httpClient.get(`${UtilitiesService.APIRoot}/globals/apps`).pipe(
      map( response => response as App[] ),
      filter( app => app.bid === null)
    );

Насколько мои чтения / видео на YouTube идут, вывод map (что составляет App[]) будет передано в метод filter.Тогда rxjs/filter будет «автоматически» зацикливаться на каждом элементе?и отсеивает нулевые значения.

Но filter каким-то образом получает App[], что вынуждает меня использовать метод обычного фильтра в обычном массиве.(не пытаясь придумать или что-то в этом роде, просто пытаюсь понять rxjs/filter: D)

Кто-нибудь знает, как я могу заставить rxjs/filter работать, пожалуйста?Любая помощь очень ценится.Заранее спасибо!!: Молись:

Ответы [ 2 ]

3 голосов
/ 14 июня 2019

Похоже, что вы фильтруете «ненулевые» значения там.

Я полагаю, что вы фильтруете массив (фильтрующее приложение [], а не каждое приложение), возвращаемый методом map. Observables - это «поток», поэтому вы взаимодействуете с Observable с помощью оператора карты.

Попробуйте изменить второй фильтр на карте следующим образом:

map(apps => apps.filter(app => app.bid != null))

чтобы вернуть отфильтрованные приложения.

2 голосов
/ 14 июня 2019

То, что вам нужно сделать в функции предиката, имеет дело с ответом , а не с серией ответов.

httpClient.get() возвращает Observable<App[]> не Observable<App>. Это означает, что функции map или filter получают один объект App[], поэтому функция filter получает только один объект массива, как и функция map.

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