Как отобразить два потока rxj?

#angular #rxjs

Вопрос:

У меня есть два асинхронных потока:

 users = new Subjectlt;User[]gt;(); groups$ = new Subjectlt;Rightsgt;(); mapped$ = new Subject();  

Я хочу сопоставить первый поток со значением из второго. Используя императивный способ, я делаю это так:

 users.foreach((user: User =gt; {  user.value = groups.find((g) =gt; g.user == user.id)?.value });    

Как это сделать с помощью RXJS, чтобы получить сопоставленный результат mapped$ ?

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

1. Вероятно, вы можете использовать mergeMap или forkJoin

2. Почему вы используете для этого потоки? Не похоже, что вам нужны потоки, массивы/списки подойдут просто отлично, нет?

Ответ №1:

Вы можете использовать combineLatest для выделения, когда либо users$ или groups$ выбрасывается, а затем map добавить группу каждому пользователю:

 combineLatest([users$, groups$]).pipe(  map(([users, groups]) =gt; users.map(user =gt; {  user.value = groups.find(g =gt; g.user == user.id)?.value  return user  })) )