>我有一个以下格式的csv文件
type,1,2,3,4,5,6,7,8,.... // Upto 48
type1,54.69801915,84.4717406,81.87766667,66.48516667,...
type2,51.57399106,84.23170179,82.13950136,67.37540461,...
......
我想用 d3 的这个 csv 数据画一个折线图。一旦我使用以下代码嵌套它们
d3.nest().key(function(d) {
return d.type;
}).entries(data);
我的 json 如下所示
{ key: "type1", values: […] }
在values
内部,它只是一个单元素数组,其值是{ 1: 54.69801915, 2: 84.4717406, 3: 81.87766667, … }
但我的期望是,这将是一个类似于
{ { 1: 54.69801915}, {2: 84.4717406}, {3: 81.87766667}, … }
有人可以告诉我我在这里做错了什么吗?或者我应该如何获得预期的格式?
嗯,这是d3.nest()
的预期行为。
如果你想要你在问题中分享的结构,values
作为一个对象数组,我建议你编写自己的嵌套函数。
下面是一个使用 map
和 for...in
执行所需操作的代码示例。它既不优雅也不美观,故意冗长以易于理解(我在您的数据中只使用了几列和几行(:
var csv = `type,1,2,3,4
type1,54.69801915,84.4717406,81.87766667,66.48516667
type2,51.57399106,84.23170179,82.13950136,67.37540461`;
var data = d3.csvParse(csv);
var nested = data.map(function(d) {
var obj = {
key: d.type,
values: []
};
for (var prop in d) {
if (prop !== "type") {
obj.values.push({
[prop]: d[prop]
})
}
}
return obj;
});
console.log(nested)
<script src="https://d3js.org/d3.v5.min.js"></script>
一些补充意见:
- 你的问题不是JSON,这只是一个简单的JavaScript对象。
- 你在问题末尾所说的数组既不是数组也不是对象,这实际上是无效的。
- 最后,不要使用数字作为属性名称。