如何从RxJS BehaviorSubject对象数组Observable中提取指定属性值
问题原因
你当前使用的Array.filter()方法本身返回的是符合条件的元素组成的新数组,所以自然会得到被数组包裹的结果,同时你没有提取year属性,不符合输出要求。
解决方案
把数组的filter方法替换为Array.find()即可,find会直接返回第一个匹配条件的元素本身,而非数组,再提取year属性就能拿到你需要的单个数值:
this.desiredYear$ = this.myData$.pipe( map(myData => myData.find(data => data.type === 'car')?.year) );
如果需要兜底逻辑,避免没有匹配到type: car的对象时返回undefined,可以加默认值处理:
// 找不到匹配对象时默认返回0,可按需修改默认值 this.desiredYear$ = this.myData$.pipe( map(myData => myData.find(data => data.type === 'car')?.year ?? 0) );
如果要求desiredYear$仅在存在匹配结果时才发出值,可以额外加RxJS的filter操作符过滤空值:
import { filter, map } from 'rxjs'; this.desiredYear$ = this.myData$.pipe( map(myData => myData.find(data => data.type === 'car')?.year), filter((year): year is number => year !== undefined) );
内容的提问来源于stack exchange,提问作者user12525404
相关产品推荐
相关产品推荐

