首页 > 解决方案 > RxJs:使用另一个可观察对象的发射过滤可观察对象中的内容

问题描述

我有一个Observable<Project>返回对象数组的。Observable<boolean>我需要根据使用对象 ID 的请求构造来过滤此数组。

下面的代码行中有一些东西,但我需要数组中的实际对象,而不是我当前映射它们的布尔数组。我猜想在最初的 observable 加入两个值之后我可以使用 zip 行中的一些东西,这样我就可以在过滤器中使用它们。

    this.projectService.getCurrentUserProjects().pipe(
      mergeAll(),
      mergeMap((project) => this.getProjectConditions(project.id)),
      filter((condition) => condition),
      toArray()
    )

我目前的线索是:

  1. 一种让我在过滤层之后访问由 mergeAll 发出的值的方法,以便我将其收集到数组中。
  2. 一种让我做一个 concatMap 的方法,它返回一个带有两个值的 observable,这样我就可以在过滤器层使用它。
  3. 某种接受 Observable 的过滤器运算符。

标签: rxjs

解决方案


考虑让内部map返回两个值(数据和条件)作为数组,如下所示:

this.projectService.getCurrentUserProjects().pipe(
  mergeAll(),
  mergeMap((project) => this.getProjectConditions(project.id).pipe(map(condition => [project, condition]))),
  filter(([,condition]) => condition), // <= only destruct second parameter 
  map(([project]) => project), // <= only destruct first parameter 
  toArray()
)

推荐阅读