我的问题是: 我如何处理从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;
)
答案 0 :(得分:1)
map
operator用于转换/更改流中的数据。
.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
答案 1 :(得分: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
可以假定),建议您使用mergeMap
和toArray
在每个项目,然后收集结果,如下所示:
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
函数中进行分配。