angular - 过滤运算符谓词函数返回数组中的所有项
问题描述
我有一个对象数组的 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 方法调用。
如果我的比较器函数评估为真,仅针对某个 id,我怎样才能正确地只产生传递的对象?
解决方案
rxjs 过滤器函数用于过滤每个发射,因此如果它使用数组发射一次,您将需要使用数组过滤器函数和映射来代替
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))
推荐阅读
- node.js - Nodejs Express Multer 文件上传 - 基于表单数据处理路由响应
- mysql - Mysql 返回统计表中每个虚拟机的总容量
- java - 动态填充 TableRow 不起作用
- android-studio - 如何摆脱 ExpandableListView 的警告“无法解析符号 'id/andr'”
- neo4j - Cypher - 加载 CSV 文件时的多重映射
- winapi - 在没有密码的情况下使用 COM API 添加计划任务?
- html - 引导媒体查询不适用于小型平板电脑和横向模式
- dsc - Get-DSCConfiguration 表示一致性检查或拉取 cmdlet 正在进行许多天
- python - 仅调整图片的宽度
- javascript - 为 Jest 测试设置 `Date.prototype.toLocaleString` 的语言环境