Сохранение общих идентификаторов из нескольких потоков с помощью rxjs?

#firebase #rxjs #reactive-programming #nosql

# #firebase #rxjs #реактивное программирование #nosql

Вопрос:

У меня есть 3 потока, поступающих из firebase, возвращающих массивы идентификаторов людей :

  • 1 поток, который дает мне всех людей, живущих в Техасе
  • 1 поток, который дает мне всех людей, которые являются мужчинами
  • 1 поток, который дает мне всех людей, у которых есть собака

Как я могу объединить их и получить только мужчин, у которых есть идентификаторы собак?

Есть ли оператор, который может предоставить мне общие идентификаторы из нескольких потоков?Я посмотрел здесь и, похоже, не нашел правильного оператора для того, что я хочу сделать.

Я мог бы объединить их и использовать Distinct, но он удаляет их вместо их предоставления.

Ответ №1:

Вы можете использовать комбинировать последние и фильтровать массивы:

 var menWithDogsFromTexas = Rx.Observable.combineLatest(
  menIds, withDogsIds, fromTexasIds,
  (men, dogs, texas) => {
    return men
      .filter(menId => dogs.indexOf(menId) >= 0)
      .filter(menId => texas.indexOf(menId) >= 0);
  }
);
 

Вот jsbin, который демонстрирует это, я даже динамически обновил идентификаторы texas, чтобы показать, что это отражается в результате.

Вы не упомянули об этом, но я предположил, что вам нужны все мужчины с собаками из Техаса. Если нет, просто удалите последний фильтр.

Комментарии:

1. Спасибо за ваш ответ!