我目前正在尝试将d3框架用于大学可视化方法。 出于测试目的,我想读取一个csv文件并将行解析为数组中的对象。
我的csv看起来像:
ID, Referred To, TimeStamp, Votes, Comment
所以我想用以下几行来读它:
d3.csv("test_comments.csv", function(data) {
commentlist = data.map(function(d) {
return[+d["ID"],
+d["Referred To"],
+d["TimeStamp"],
+d["Votes"],
+d["Comment"]
]
});
});
但是如果我想在之后读出这些值,我只是得到了#34; undefined" 我也尝试过mbostock在这个帖子中描述的方式: csv to array in d3.js
但是使用全局变量也不起作用。
var commentlist;
d3.csv("test_comments.csv", function(data) {
commentlist = data.map(function(d) {
return[+d["ID"],
+d["Referred To"],
+d["TimeStamp"],
+d["Votes"],
+d["Comment"]
]
});
});
console.log(commentlist);
我理解错了吗? 也许你有解决方案。
答案 0 :(得分:1)
var commentlist=[];
d3.csv("test_comments.csv", function(data) {
commentlist=data;
});
console.log(commentlist);
我所知道的是,在回调数据对象中将包含csv文件的所有数据行的JSON对象数组,每个行数据都以JSON格式推送到数据数组中。 如下
[{"ID": valueFromtheRow, "Referred To": value, "TimeStamp": value, "Votes":value, "Comment":value}]
通过传递JSON数组来调用回调函数。 所以数据对象看起来像
data=[{"ID": valueFromtheRow, "Referred To": value, "TimeStamp": value, "Votes":value, "Comment":value}];
希望你明白......如果没有问我。
答案 1 :(得分:0)
我认为你得到{console.log(commentlist)}未定义的原因是在d3.csv中,回调函数被解析并最后被浏览器调用,并且{console.log(commentlist)}被更早地调用,即使它出现在代码的底部。因此,当调用{console.log(commentlist)}时,{commentlist}实际上是未定义的(仅声明)。 话虽这么说,只是尝试将{console.log(commentlist)}放在回调中,它应该完成这项工作。