0

我的问题是:如何操作从 http 请求获得的对象列表中的对象。例如,我收到一个包含每个对象的对象列表,例如

{
    start:start,
    end:end,
    title:title,
}

我需要修改为

{
    start: new Date(start),
    end: new Date(end),
    title:title,
    draggable:true,
    resizable:true,
}

我的代码

this.http.get('https:url-to-guest-events').pipe(
    //what operator can i use, map maybe?
)
.subscribe(
    events => this.events = events;
)
4

2 回答 2

1

map运算符用于转换/更改流中的数据。

.pipe(
  map( original => {
    // code here to modify the original
    // be sure to call return on the result
  })
)

您可以做的最简单的转换可能是:

.pipe(
  map( original => {
    return {
      start: original.start,
      end: original.end,
      title: original.title,
      draggable: true,
      resizable: true
    }
  })
)

我个人会声明一个类并设置值,但如果你只是使用自由形式的对象/哈希,这就足够了。

这是关于 StackBlitz 的演示:https ://stackblitz.com/edit/typescript-3mdpjo?file=index.ts&devtoolsheight=100

于 2018-11-14T21:01:59.340 回答
1

map运算符与对象解构一起使用以获得最短的结果:

this.http.get('https:url-to-guest-events').pipe(
    map(({start, end, title}) => ({
        start: new Date(start),
        end: new Date(end),
        title: title,
        draggable: true,
        resizable: true,
    }))
)
.subscribe(
    events => this.events = events
)

如果您从 HTTP 端点收到一个数组(可以假定是由于命名events),我建议使用mergeMapandtoArray对每个项目执行映射,然后收集结果,如下所示:

this.http.get('https:url-to-guest-events').pipe(
    mergeMap(result => result),
    map(({start, end, title}) => ({
        start: new Date(start),
        end: new Date(end),
        title: title,
        draggable: true,
        resizable: true,
    })),
    toArray()
)
.subscribe(
    events => this.events = events
)

mergeMap将所有数组项流式传输到单独的通知中。映射后,toArray将收集所有通知并将它们放回数组中,方便您稍后在subscribe函数中分配。

于 2018-11-14T21:06:36.950 回答