我将使用RXJS运算符filter
过滤对象数组
我有一系列这样的对象:
{
id: string,
count: number
}
我会得到count > 20
我尝试过:
getVotes2(): Observable<Vote> {
return this._http.get<Vote>(url)
.pipe(
map( results => results ),
filter( result => result.count>20 )
);
}
接下来,没有map
,我总是会得到所有记录。
有什么想法吗?
---------正确的代码------------
getVotes2(): Observable<Vote[]> {
return this._http.get<Vote[]>(url)
.pipe(
map( results => results.filter( r => r.count < 20) )
)
}
答案 0 :(得分:7)
您对使用rx过滤器运算符感到困惑。
filter rx运算符与数组filter运算符不同。 rx过滤器对流进行操作,并从流中排除满足条件的内容,数组过滤器运算符对数组进行操作,并根据条件从数组中删除项目。
您当前正在做的是在数组本身的一些未定义的“ count”属性上过滤流,因此您要说“如果未定义> 20,则让该项通过流”,以及其中一个怪癖的javascript,未定义的IS大于20。
您需要做的是这样
getVotes2(): Observable<Vote[]> {
return this._http.get<Vote[]>(url)
.pipe(
map( results => results.filter(r => r.count > 20) )
);
}
这样,您可以使用rx Map在流中的项目上执行操作,并在项目上使用数组过滤器来过滤数组。
编辑:如前所述,键入还必须正确,以使打字稿知道您期望的是投票对象数组而不是单个投票对象。
答案 1 :(得分:0)
如果您收到的http响应类似
{
data: {
results: [ {id: 'dd5144s', count: 14}, {id: 'dd51s4s', count: 22}, {id: 'dd5sa44s', count: 8} ]
}
}
然后尝试:
return this._http.get<Vote>(url)
.pipe(
switchMap( results => results ),
filter( result => result.count>20 )
);
希望这会有所帮助。