Как создать новый массив Observable на основе двух существующих массивов Observable, - PullRequest
0 голосов
/ 03 июня 2019

У меня есть два наблюдаемых массива, которые заполняются с разных конечных точек API.То, что я хочу сделать, это сравнить их на основе идентификатора, поэтому возьмите только те, которые равны, а затем выберите свойства вишни для каждого объекта в массивах, чтобы создать новый массив Observable.Есть идеи?

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Это должно сделать:

forkJoin(
  obs1$,
  obs2$,
).pipe(
  map((obs1, obs2) => 
    obs1
      .filter(v1 => obs2.some(v2 => v1.id === v2.id))
      .map((v, i, a) => ({ ...v, ...(obs2[i] || {})}))
  ),
);
  • Объедините обе наблюдаемые
  • труба к карте
  • фильтрует первый массив по равным идентификаторам второго массива
  • отображать элемент первого массива, который будет расширен элементом второго массива (если он определен)
  • Возвращает значение, созданное из трубы.

Подтверждение концепции:

const d1 = [
  { id: 1, value: 'v1.1' },
  { id: 2, value: 'v1.2' },
  { id: 3, value: 'v1.3' },
  { id: 4, value: 'v1.4' },
];

const d2 = [
  { id: 1, value: 'v1.1 overriden' },
  { id: 2, value2: 'v1.2 extended' },
];

console.log(d1
  .filter(v1 => d2.some(v2 => v1.id === v2.id))
  .map((v, i, a) => ({ ...v, ...(d2[i] || {})}))
);
0 голосов
/ 10 июня 2019
forkJoin(
      this.MeasuringPoints$,
      this.LatestReadings$,
    ).subscribe( data => {
          .filter(v1 =>  data[1].some(v2 => v1.uuid === v2.mpUuid))
          .map((v, i) => ({ ...v, ...(data[1][i] || {})}));
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...