d3 csv读入数组中的对象

时间:2014-07-21 11:23:09

标签: javascript csv d3.js

我目前正在尝试将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);

我理解错了吗? 也许你有解决方案。

2 个答案:

答案 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)}放在回调中,它应该完成这项工作。