Angular: как мне фильтровать Rxjs по свойству через массив объектов?

Как правильно применить фильтр 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 ... какие-нибудь советы?

Спасибо!!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 351
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оператор 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;
      });

Загляну в карту, спасибо @ggradnig. О да, это сработало !! Еще раз спасибо!

dhoffens 09.08.2018 21:26

это похоже на проблему с набором текста .. вам нужно объявить интерфейс для типа данных, который вы получаете, и сохранить его в this.symbolSearchService.symbolLookup (val)

ggradnig 09.08.2018 21:29

Другие вопросы по теме