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

Javascript RXJS循环遍历项目并返回一个数组,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我的名为“getList”的服务返回项目列表。 我想循环浏览项目列表并格式化日期。 然后返回格式化的数组 我当前的尝试没有返回数组中的项目,因为我使用flatMap来循环map中的项目 我用的是angular6和rxjs 我的尝试: this.list$ = this.service.getList() .pipe( flatMap(response => response.items), map(item => { i

我的名为“getList”的服务返回项目列表。 我想循环浏览项目列表并格式化日期。 然后返回格式化的数组

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

我用的是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;
        })
      );
在模板中使用上述管道(自定义管道)

{{ date | dateFormat}}

您只需在管道末端添加
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()
)
不过,更好的方法可能是重新构造代码,使用可观察的
map
操作符而不是
flatMap
(也称为
mergeMap
),并在其中使用数组
map
方法进行格式化。换句话说,类似于

pipe(
    map(response => response.items.map(item => {
        item.date = moment(item.date).format('YYYY-MM-DD').toString();
        return item;
    }))
)
第二种方法避免了数组的展开(在第一种解决方案中,您使用的是
flatMap
)和随后的数组重建,或者至少将此逻辑限制在数组的
map
方法中
const formatItem=item=>{
const formatItem = item => {
  item.date = moment(item.date).format('YYYY-MM-DD').toString();
  return item;
};

this.list$ = this.service.getList()
  .pipe(
    flatMap(response => from(response.items.map(formatItem))), // returns Observable<items> from array of items
    // flatMap merges back the observables into one
    toArray()
  );
item.date=时刻(item.date).format('YYYY-MM-DD').toString(); 退货项目; }; this.list$=this.service.getList() .烟斗( flatMap(response=>from(response.items.map(formatItem)),//从项数组返回可观察的值 //flatMap将观测值合并为一个 toArray() );
u可以使用管道模板设置日期格式itself@mohammedsameen你能给我举个例子吗?{list$| async | date:'yyyy-MM-dd'}之类的东西很有效,谢谢。如果不知道如何使用RXJS实现这一点就好了,因为我不想要定制的管道解决方案。他们也很慢
const formatItem = item => {
  item.date = moment(item.date).format('YYYY-MM-DD').toString();
  return item;
};

this.list$ = this.service.getList()
  .pipe(
    flatMap(response => from(response.items.map(formatItem))), // returns Observable<items> from array of items
    // flatMap merges back the observables into one
    toArray()
  );