刚开始使用RxJS并尝试将我的头缠在filter
上。 https://rxjs-dev.firebaseapp.com/api/operators/filter
从它的外观上,没有什么要弄清楚的,我知道吗? :S
这就是我所拥有的-
declare interface App {
id: string;
bId: string;
account: string;
title: string;
platform: string;
isLive: boolean;
}
public allApps: Observable<App[]>;
this.allApps = this.httpClient.get(`${UtilitiesService.APIRoot}/globals/apps`).pipe(
map( response => response as App[] )
);
此get/pipe/map
获取对象并将其正确投射到App[]
数组中。到目前为止没有问题!
现在,我想filter
退出bid !== null
,并且在this.allApps
中仅包含有效值。因此,我试图像这样将map
的输出传递给filter
-
this.allApps = this.httpClient.get(`${UtilitiesService.APIRoot}/globals/apps`).pipe(
map( response => response as App[] ),
filter( app => app.bid === null)
);
就我的阅读资料/ YouTube视频而言,map
(即App[]
)的输出将传递给filter
方法。然后rxjs/filter
会“自动”遍历每个项目吗?并清除空值。
但是filter
以某种方式接收了App[]
,这迫使我在常规数组上使用常规过滤方法。 (不要试图花哨或类似的事情,而只是想了解rxjs/filter
:D)
有人知道我如何使rxjs/filter
工作吗?任何帮助是极大的赞赏。提前致谢!! :pray:
答案 0 :(得分:3)
您似乎正在此处过滤掉“非空”值。
我相信您正在过滤从map方法返回的数组(过滤App []而不是每个应用)。可观察对象是一个“流”,因此您正在与地图操作员进行可观察对象的交互。
尝试将第二个过滤器更改为地图,例如:
map(apps => apps.filter(app => app.bid != null))
返回过滤的应用程序。
答案 1 :(得分:2)
您需要在谓词功能中处理响应,而不是处理一系列响应。
httpClient.get()
返回Observable<App[]>
而不是Observable<App>
。这意味着map
或filter
函数只能得到一个对象App[]
,因此filter
函数和map
函数一样只能得到一个数组对象。