网站搜索

javascript - 过滤可观察对象的结果


我有一个服务,它返回一个组织对象的可观察对象,我想根据我传入的organizationID来过滤结果。

目前我正在做类似这样的事情,但它返回了所有值,而不是筛选后的值。

filteredOrganization(organizationId: number) {
  return this.http.get < Organization[] > (this.baseUrl + '/list').pipe(
    map(organizations => {
      return organizations.filter(organization => {
        organization.id === organizationId;
        return {
          id: organization.id,
          name: organization.name,
        };
      });
    }),
  );
}

例如,服务返回 [{1: abc, 2: def, 3: pqr}]

我想传入1作为组织ID,并希望结果是[{1: abc}]

我得到的是 [{1: abc, 2: def, 3: pqr}]

答案#1

看看这个:

https://stackblitz.com/edit/angular-ivy-euxd7m?file=src/app/app.component.ts

filter (rxjs) 期望返回一个布尔值,在这种情况下,不需要将返回值指定为对象。

你已经在制作地图了,只是在进行过滤……

this.appService.get()
     .pipe(
        map(organizations => {
          return organizations.filter(x => x.id === organizationId);
        })
      )
      .subscribe(val => console.log(val));

答案#2

你展示的这个例子不需要做 map,因为输出格式和输入相同。你只需要做 filter。

filteredOrganization(organizationId: number) {
    return this.http.get<Organization[]>(this.baseUrl + '/list').pipe(
        filter(organization => organization.id === organizationId))
});