2016-10-14 4 views
0

У меня есть 3 потока исходя из firebase возвращающихся массивов людей IdS:Сохранение общих идентификаторов из нескольких потоков с помощью rxjs?

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

Как слить их и получить только мужчин, у которых есть собачьи ids?

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

Я мог бы объединить их и использовать 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 that demonstrate it, я даже обновил Техасские идентификаторы динамически, чтобы показать, что отражает результат.

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

+0

Спасибо за ваш ответ! – Tom