Как я могу фильтровать и отображать с помощью Switch Map в одном утверждении? - PullRequest
2 голосов
/ 04 октября 2019

У меня есть эмиттер, который испускает массив объектов, который выглядит следующим образом.

ServerDropdownOption
name: "Just Closed Buyers"
selected: true
value: "leadbucket::07727388-500A-4ED0-BB5A-1BB4718F1AFC"
__proto__: Object

код, который я использую, использует switchMap, чтобы возвращать только значение каждого объекта.

this.chipsSelect.multiSelectBox.onSave
  pipe(
  takeWhile(_ => this.alive),
  filter((tag) => tag.selected === 'true'),
  switchMap(updatedSelection => this.contactsService.updateBuckets(this.contactId, updatedSelection.map(tag => tag.value))) )
  .subscribe();

Теперь мне нужно отфильтровать на основе выбранного значения, а также вернуть те, где это значение истинно. Проблема в том, что он генерирует следующую ошибку.

Свойство selected не существует для типа 'IOptionMultiSelectBox []'

export interface IOptionMultiSelectBox {
    name: string;
    value: any;
    selected: boolean;
}

, поэтому у моего IOptionMultiSelectBox есть свойство selected, но данные возвращаются измоя наблюдаемая - это массив объектов. Так как же это исправить, чтобы фильтр работал?

Ответы [ 2 ]

3 голосов
/ 05 октября 2019

вместо rxjs filter, используйте map, а затем используйте массив JS array.prototype filter, чтобы получить selected, которые true:

this.chipsSelect.multiSelectBox.onSave
  pipe(
    takeWhile(_ => this.alive),
    map((tags: IOptionMultiSelectBox[]) => tags.filter(tag => tag.selected == true)),
    // .....
0 голосов
/ 05 октября 2019

Я заставил его работать, фактически применив фильтр перед процессом emit

save(optionsList: IOptionMultiSelectBox[]) {
this.onSave.emit(optionsList.filter(data => data.selected === true));
this.toggleDirective.close();
}

В этом случае он не пожаловался на выбранное свойство

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