我有一个看起来像这样的数据结构:
Observable<Array<LineChart>>
由此定义了一个 LineChart
export interface LineChart {
name?: null | string;
series?: null | Array<DateLineChartEntry>;
}
DateLineChartEntry 定义如下:
export interface DateLineChartEntry {
name?: string;
value?: number;
}
其中名称为字符串,其中包含日期。
对于此 DataStructure 的后续操作,我需要将 DateLineChartEntry 转换为 sth。像这样:
export interface DateLineChartEntryConverted {
name?: Date;
value?: number;
}
这意味着,我必须像这样映射所有 DateLineChartEntries
DateLineChartEntry => {
name: new Date(name),
value: value
}
我目前的解决方案是这样的:
this.data = getObservable({ body: parameters }).pipe(
map(lca => {
var lcaConverted = [];
for (var lc of lca) {
var name = lc.name
var lcN = {
name: name,
series: []
};
for (var e of lc.series) {
var n = new Date(e.name);
lcN.series.push({
name: n,
value: e.value
});
}
lcaConverted.push(lcN);
}
return lcaConverted;
})
);
这很丑陋,我正在寻找一个“更好”的解决方案。
是否有一种简单的方法可以通过使用初始 Observable(并接收 Observable 作为输出)来做到这一点?
预先感谢您的帮助。
最佳答案
您只是在寻找更干净一点的东西吗?如果是这样,请查看一些较新的数组功能,而不是编写 for
:
this.data = getObservable({
body: parameters
}).pipe(
map(lca => lca.map(entry => ({
name: entry.name,
series: entry.series.map(x => ({
name: new Date(x.name),
value: x.value
}))
}))
)
);
特别是 .map
:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
关于javascript - Observable 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59253147/