将筛选器应用于Observable



我们如何将过滤器应用于Observable,以便根据某些条件获取数据?我的要求是从userObservable中筛选出状态为">Approved"的用户。

下面是我的http服务方法。

getUserList(){
return this.httpClient.get<UserModel[]>(environment.userListUrl);
}

以下是用户模型

export class UserModel{
userName: string;
userStatus: string;
}

这就是我正在尝试做的,但不确定如何应用过滤器,以便我可以获得userStatus为">Approved"的用户

const userObservable$: Observable<UserModel[]>=this.userService.getUserList(this.cmpnyId);
observable$.pipe(filter(....<Need help here>));

您可以在服务中使用它,以便将业务逻辑保留到服务中。

代码示例:

enum Status{
approved = 'Approved'
}
getUserList(){
return this.httpClient.get<UserModel[]>(environment.userListUrl)
.pipe(
map(users => 
users.filter(user => 
user.userStatus == Status.approved))
}

注意,为了便于将来更改状态,请将Enum用于类似的操作。

查看RxJS关于映射运算符的文档:

filteredObservable$ = userObservable$.pipe(
map(users => users.filter(user => user.userStatus == "Approved"))
)

您应该将Observable的值映射到一个新的过滤数组。您正在使用的filter运算符只能用于允许或丢弃Observable发出的值,它与.filter数组函数无关,后者从数组中过滤某些元素。