RXJS6-过滤对象数组

3D_*_*fun 5 rxjs

我将使用RXJS运算符过滤对象数组 filter

我有一系列像这样的对象:

    {
      id: string,
      count: number
    }
Run Code Online (Sandbox Code Playgroud)

我会得到的东西 count > 20

我试过了:

  getVotes2(): Observable<Vote> {
    return this._http.get<Vote>(url)
     .pipe(
       map( results => results ),
       filter( result => result.count>20 )
     );
  }
Run Code Online (Sandbox Code Playgroud)

接下来,如果没有map,我将始终获得所有记录。

有任何想法吗?

---------正确的代码------------

getVotes2(): Observable<Vote[]> {
 return this._http.get<Vote[]>(url)
  .pipe(
    map( results => results.filter( r => r.count < 20) )
  )
}
Run Code Online (Sandbox Code Playgroud)

bry*_*n60 11

您对使用rx过滤器运算符感到困惑。

filter rx运算符与数组filter运算符不同。rx过滤器对流进行操作,并从流中排除满足条件的内容,数组过滤器操作符对数组进行操作,并根据条件从数组中删除项目。

您当前正在做的是根据数组本身的一些未定义的“ count”属性过滤流,因此您要说的是“如果undefined> 20,则让该项通过流”,以及其中一种javascript怪癖,未定义IS大于20。

您需要做的是:

getVotes2(): Observable<Vote[]> {
 return this._http.get<Vote[]>(url)
  .pipe(
    map( results => results.filter(r => r.count > 20) )
  );
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以使用rx Map在流中的项目上执行操作,并在项目上使用数组过滤器来过滤数组。

编辑:如前所述,键入还必须正确,以使打字稿知道您期望的是投票对象数组,而不是单个投票对象。