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))

enter image description here

第一个控制台日志位于过滤器函数内,第二个控制台日志位于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谓词函数返回数组中的所有项的主要内容,如果未能解决你的问题,请参考以下文章

Core Data fetch 中的谓词返回的结果与数组上的相同谓词不同

使用流

STL算法中函数对象和谓词

Rust - 创建过滤谓词作为函数

js中的filter

js数组的五种迭代遍历方式 every filter forEach map some