Rx js различается на наблюдаемом массиве нормального массива - PullRequest
0 голосов
/ 28 января 2020

У меня есть следующий сценарий.

У меня есть группа лет, которая является нормальным массивом:

years: number[]

Для каждого года мне нужно вызывать функцию, которая возвращает наблюдаемое с объекты массива.

getData(year: number): Observable<Data[]>

Далее мне нужно получить различное значение всех этих массивов объектов, и это будет чувствовать себя одним ng-select. Отличное основано на свойстве в объекте данных.

Я хочу иметь 1 оператор Rx JS для этой логики c (повторять все годы, получить все наборы результатов за эти годы, сделать его отличным и подписаться на него).

Каков наилучший способ сделать это с Rx JS в одном выражении?

1 Ответ

0 голосов
/ 06 февраля 2020

Предполагая, что отдельное свойство в Данные называется id :

const { of, Observable, from } = rxjs; 
const { map, mergeMap, distinct } = rxjs.operators;

const years = [2019, 2020];

const getData = (year) => {
  return year === 2019
    ? of([{ id: 'a' }, { id: 'x' }, { id: 'c' }])
    : of([{ id: 'a' }, { id: 'y' }, { id: 'c' }]);
}

const source = from(years).pipe(
  mergeMap(getData),
  mergeMap(flatten => flatten),
  distinct((data) => data.id)
);

source.subscribe(x => console.log(x));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.4/rxjs.umd.js"></script>
...