如何遍历或过滤Observable<Cat[]>类型数组并筛选指定名称数据
解决方案
你的代码存在几个关键问题,导致筛选逻辑失效:
- 错误使用
of(this.data$)将Observable<Cat[]>包装成了Observable<Observable<Cat[]>>,后续map操作里拿到的是Observable对象而非实际的猫数组,无法直接调用filter - 字段名不匹配:Cat接口定义的是
name字段,你却用了不存在的userFullName - 没有完成"仅输出名称列表"的需求,仅做了过滤未提取名称
修正后的代码如下:
data$ = this.mycatservice.GetCatList(); const filterString = 'ar'; // 直接在data$上进行管道操作,无需额外用of包裹 this.results$ = this.data$.pipe( // 筛选name以'ar'开头的猫(如需不区分大小写,可改为data.name.toLowerCase().startsWith(filterString.toLowerCase())) map(cats => cats.filter(cat => cat.name.startsWith(filterString))), // 提取筛选后的猫的名称列表 map(filteredCats => filteredCats.map(cat => cat.name)) );
说明:
- 直接在
data$这个Observable上调用pipe,避免嵌套Observable的问题 - 先过滤出符合条件的Cat对象,再通过第二个
map提取所有name字段,得到纯名称字符串数组的Observable - 如果需要忽略大小写匹配,可以在判断时统一转为小写(注释里的写法)
内容的提问来源于stack exchange,提问作者Nadeem Ahmad
相关产品推荐
相关产品推荐

