Как правильно применить фильтр RXJS v5.5 к массиву объектов?
Я возвращаю массив json, который выглядит так:
[
0: {CompanyName: "Facebook Inc-A", Symbol: "FB", is_etf: false},
1: {CompanyName: "Flagstar Bancp", Symbol: "FBC", is_etf: false},
2: {CompanyName: "UBS AG FI Enhanced Large Cap Growth ETN", etf_data: {…}, Symbol: "FBGX", is_etf: true},
3: {CompanyName: "Fortune Brd H&S", Symbol: "FBHS", is_etf: false},
4: {CompanyName: "Fortress Biotec", Symbol: "FBIO", is_etf: false},
5: {CompanyName: "First Bus Finl", Symbol: "FBIZ", is_etf: false},
...]
Мне нужно сохранить ценности с is_etf === false
В настоящее время у меня есть:
...
.switchMap(val => this.symbolSearchService.symbolLookup(val))
.takeUntil(this.ngUnsubscribe)
.filter((value) => {
console.info(value)
return true
})
.subscribe(val => {
console.info('val', val)
this.searchResults = val;
});
symbolLookup возвращает упомянутый выше массив. внутри фильтра я пробовал:
value => !value.is_etf
value => return value.is_etf === false
value => value['is_etf'] === false
но ничего из этого не работает, так как свойство is_etf находится в каждом объекте, а не в ответе значения. До RXJS я бы просто сделал цикл for, а затем просто пошел бы с value[i]['is_etf']
и т. д., Но здесь не повезло. Все материалы для чтения, с которыми я столкнулся, используют простые фильтры, такие как value => value> 2 ... какие-нибудь советы?
Спасибо!!
Оператор filter
в RxJS не ведет себя как функция Array.filter
, используемая для фильтрации элементов из списка.
То, что вы фактически получаете от this.symbolSearchService.symbolLookup(val)
, кажется массивом, поэтому тип излучения в filter
также будет массивом. Итак, то, что вы, возможно, ищете, - это оператор map
, который пересылает отфильтрованный список, например:
.switchMap(val => this.symbolSearchService.symbolLookup(val))
.takeUntil(this.ngUnsubscribe)
.map((values) => {
return values.filter(v => !v.is_etf);
})
.subscribe(val => {
console.info('val', val)
this.searchResults = val;
});
это похоже на проблему с набором текста .. вам нужно объявить интерфейс для типа данных, который вы получаете, и сохранить его в this.symbolSearchService.symbolLookup (val)
Загляну в карту, спасибо @ggradnig. О да, это сработало !! Еще раз спасибо!