无法使用打字稿在可观察对象列表中使用过滤器

时间:2020-12-26 17:45:02

标签: angular observable angular2-observables

尝试过滤 Observable List 中的对象列表。

型号:

export class Month {
  id: string;
  description: string;
}

值:

描述:“一月” 编号:“01”

描述:“二月” 编号:“02”

描述:“三月” 编号:“03”

在我的服务中,我尝试返回一个包含选定值的列表,在这种情况下只有一个,但将来可能会更多。

  selectedMonth: string = "02";
    public getMonths(): Observable<Month[]> {
        return of(this.MONTHS).pipe(
          map(months => {
            months.filter(month => {
              month.id === this.selectedMonth;
            });
            return months;
          })
        );
      }

但似乎过滤器根本不起作用,我总是得到整个列表(12 个元素,而不是一个元素)

ngOnInit(): void {
    this.monthservice.getMonths().subscribe(months => (this.months = months));

    console.log(this.months);
  }

这个链接有代码:

https://stackblitz.com/edit/angular-myfilter?file=src/app/services.ts/month.service.ts

有什么帮助吗?

谢谢

3 个答案:

答案 0 :(得分:1)

推荐使用最短形式:

public getMonths(): Observable<Month[]> {
    return of(this.MONTHS).pipe(
      map(months => months.filter(month => month.id === this.selectedMonth))
    );
  }

答案 1 :(得分:0)

这是因为您返回的不是过滤后的数组,而是原始数组。

public getMonths(): Observable<Month[]> {
    return of(this.MONTHS).pipe(
      map(months => {
        return months.filter(month => month.id === this.selectedMonth);
      })
    );
  }

答案 2 :(得分:0)

问题是你的地图功能。您的 map 函数正在执行一些操作,但没有返回任何对象。你必须返回一个对象:

map(months => {
  let filteredM = months.filter(month => {
    month.id === this.selectedMonth;
  });
  return filteredM;
})

但是map函数的作用是改变详细源的类型,在这种情况下,源和结果具有相同的类型,所以在这种情况下,您可以只使用过滤器函数而没有映射。

相关问题