我有一些代码:
var cdata = [];
d3.text("tests.info", function(text) {
var data = d3.csv.parseRows(text);
data.forEach(function(d) {
cdata.push({key: d[0],values: []}
);
});
});
它正在读取CSV文件,然后在将它们添加到数组之前循环通过这些行。我已经使用日志来查看数据是否正确添加,所以这很好。
问题是,如果我之后尝试访问该数组,它就是空的,好像数据从未被添加(虽然我知道这不是真的)。
我认为这与范围界定有关,但我认为push()
无论如何都应该以这种方式运作。
答案 0 :(得分:2)
尝试在超时功能中console.log
,或者放一个显示cdata内容的按钮,你会发现它不是空的。正如Pointy所说,发生的事情是:
您声明cdata
您开始加载test.info
您显示cdata的内容
test.info
已加载,您开始循环并将数据放入数组中
答案 1 :(得分:0)
您需要返回cdata
:
d3.text("tests.info", function(text) {
var data = d3.csv.parseRows(text), cdata = [];
data.forEach(function(d) {
cdata.push({key: d[0],values: []};
});
return cdata;
});
也考虑一下
d3.text("tests.info", function(text) {
return d3.csv.parseRows(text).map(function(d) {
return {key: d[0], values: []};
});
});