D3 数据重塑:数组的属性



我有一些这种格式的数据:

{
seriesOne: [
[1, 42.3],
[2, 12.9]
],
seriesTwo: [
[1, 23.1],
[2, 10.6]
]
}

但我正在查看一个D3 示例,其中数据最终采用以下格式:

[{
id: "seriesOne",
values: [{
x: 1,
y: 42.3
},
{
x: 2,
y: 12.9
}
]
},
{
id: "seriesTwo",
values: [{
x: 1,
y: 23.1
},
{
x: 2,
y: 10.6
}
]
}
]

我可以按原样绘制图表吗?或者,是否有 D3 方法可以重塑我的数据?

我可以用普通的旧 JS 重塑它,但这似乎效率低下。

var reshapedData = [];
Object.keys(originalData).forEach(function (key) {
currentSeries = {id: key, values: []};
originalData[key].forEach(function (value) {
currentSeries['values'].push({x: value[0], y: value[1]});
});
reshapedData.push(currentSeries);
});

您可以使用reduce()方法和方法内部map()来创建values对象数组。

const data = {"seriesOne":[[1,42.3],[2,12.9]],"seriesTwo":[[1,23.1],[2,10.6]]}
const result = Object.keys(data).reduce((r, id) => {
r.push({id, values: data[id].map(([x, y]) => ({x, y}))})
return r;
}, [])
console.log(result)

最新更新