2014-07-21 77 views
4

我目前正在尝试使用d3框架来实现大学可视化方法。 为了测试目的,我想读取一个csv文件并将行解析为数组中的对象。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"] 
      ] 
    }); 
}); 

但是,如果我想事后读出的值,我刚开始“不确定” 我也尝试了mbostock在这个线程中描述的方式: csv to array in d3.js

但是使用全局变量i也没有工作。

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

您的CSV文件中有空格吗?然后删除这些。此外,我猜想转换“评论”到一个数字是没有意义的。 –

+0

是的,但只是在评论部分,Idea是一个社交网络评论的新形象化。所以我想将评论存储在csv里面,可能吗? – hGen

+0

当然,但是您的代码将CSV中的所有内容都转换为数字,如果您有字符串,那么这是没有意义的。 –

回答

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}] 

回叫功能是通过使JSONs阵列调用。 所以数据对象的样子

data=[{"ID": valueFromtheRow, "Referred To": value, "TimeStamp": value, "Votes":value, "Comment":value}]; 

希望你明白......如果不是问我。

+0

谢谢你是另一次尝试,但我想访问例如console.log(commentlist [1])我得到未定义为返回。 – hGen

+0

@hGen d3中的CSV函数是异步的,commentlist [1]未定义,可能csv文件尚未加载,csv文件中的数据尚未分配给commentlist变量。 – chaitanya89

0

我认为你得到{console.log(commentlist)}的原因是undefined,在d3.csv里面,回调函数最后被浏览器解析和调用,{console.log(commentlist)}被调用了,尽管它出现在你的代码的底部。因此,在调用{console.log(commentlist)}时,{commentlist}实际上是未定义的(仅声明)。 也就是说,只要将{console.log(commentlist)}放入回调中,它就可以完成这项工作。