Фильтр Наблюдаемый по свойству массива объектов - PullRequest
0 голосов
/ 19 сентября 2019

Мне нужно отфильтровать Observable и «пропустить» только поток, имеющий конкретное значение свойства в массиве объектов, который находится внутри этого потока.

Давайте рассмотрим пример.Это наблюдаемое.

 const observable = of({name: 'agency', year: '2010', job: [
        {name: 'plumber', city: 'Los Angeles'},
        {name: 'driver', city: 'Dallas'}
      ]});

observable.subscribe(response => console.log(response));

Мне нужно console.log ответа (ответ должен быть целым потоком) в методе подписки, только когда в работе есть 'name: plumber' массив.

Итак, что я делаю:

observable.pipe(
 filter(obs => obs.job.filter(item => item.name === 'plumber')))
.subscribe(response => console.log(response));

или

observable.pipe(
 map(obs => obs.job),
 filter(item => item.name === 'plumber'))
.subscribe(response => console.log(response));

К сожалению, вышеприведенные фрагменты кода не работают должным образом.

Я хочу получить весь поток, только если в массиве заданий есть ключ-значение = имя: 'сантехник'.

Если это условие выполнено, я хочу получить console.log:{name: 'agency', год: '2010', job: Array (2)}, иначе в консоли ничего не должно отображаться.

Не могли бы вы мне помочь?

1 Ответ

3 голосов
/ 19 сентября 2019

Я думаю, что это сработает:

const observable = of({name: 'agency', year: '2010', job: [
        {name: 'plumber', city: 'Los Angeles'},
        {name: 'driver', city: 'Dallas'}
      ]})
        .pipe(filter(obj => obj.job.some(({ name }) => name === 'plumber')))

observable.subscribe(response => console.log(response));

Для каждого переданного значения вы проверяете, содержит ли свойство jobs элемент, который удовлетворяет рассматриваемому условию.Это может быть достигнуто с помощью Array.prototype.some () .

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