Filter Operator谓词函数返回数组中的所有项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Filter Operator谓词函数返回数组中的所有项相关的知识,希望对你有一定的参考价值。
我有一个Observable对象数组。每个对象都有一个'id'属性。我正在使用filter方法,目的是只返回与特定id匹配的对象的observable。
当我实现以下代码时,谓词函数返回整个数组。我的期望是只有一件物品通过。
this.blog$ = this.store.select('posts', 'blogs').pipe(
filter((post, index) => {
console.log(post[index].id == this.id);
return post[index].id == this.id
}),
).subscribe(x=>console.log(x))
第一个控制台日志位于过滤器函数内,第二个控制台日志位于subscribe方法中。
如果我的比较器函数评估为truthy,仅针对某个id,我怎样才能正确地产生传递对象?
答案
rxjs过滤器函数用于过滤每个发射,因此如果这对阵列发射一次,则需要使用数组过滤器函数和map来代替
this.blog$ = this.store.select('posts', 'blogs').pipe(
map((posts) => posts.filter((post) => post.id == this.id))
).subscribe(x=>console.log(x))
或者,如果您只需要第一个匹配项,并希望将结果作为对象而不是具有1个元素的数组,则只需使用find
数组函数:
this.blog$ = this.store.select('posts', 'blogs').pipe(
map((posts) => posts.find((post) => post.id == this.id))
).subscribe(x=>console.log(x))
另一答案
完整的rx替代方案是:
this.blog$ = this.store.select('posts', 'blogs').pipe(
mergeAll(),
filter(post => post.id == this.id)
).subscribe(post => console.log(post))
以上是关于Filter Operator谓词函数返回数组中的所有项的主要内容,如果未能解决你的问题,请参考以下文章