RXJS 循环遍历项目并返回一个数组

Ang*_*arM 3 javascript rxjs typescript angular

我的名为“ getList ”的服务返回一个项目列表。我想遍历项目列表并格式化日期。然后返回格式化的数组。

我目前的尝试没有返回数组中的项目,因为我使用 flatMap 来循环地图中的项目。

我正在使用 angular6 和 rxjs。

我的尝试:

this.list$ = this.service.getList()
      .pipe(
        flatMap(response => response.items),
        map(item => {
          item.date = moment(item.date).format('YYYY-MM-DD').toString();
          return item;
        })
      );
Run Code Online (Sandbox Code Playgroud)

Pic*_*cci 7

您可以简单地toArray()在管道末端添加

this.list$ = this.service.getList()
.pipe(
    mergeMap(response => response.items),
    map(item => {
        item.date = moment(item.date).format('YYYY-MM-DD').toString();
        return item;
    }),
    toArray()
)
Run Code Online (Sandbox Code Playgroud)

可能更好的方法是稍微重构一下您的代码,使用 Observablemap运算符而不是flatMap(aka mergeMap),并在其中使用 Arraymap方法进行格式化。换句话说,像

pipe(
    map(response => response.items.map(item => {
        item.date = moment(item.date).format('YYYY-MM-DD').toString();
        return item;
    }))
)
Run Code Online (Sandbox Code Playgroud)

第二种方法避免了 Array 的展开(在您使用的第一个解决方案中flatMap)以及随后对 Array 的重新创建,或者至少将此逻辑限制map在 Array的方法中