Javascript 将数据从csv复制到D3中的数组中

Javascript 将数据从csv复制到D3中的数组中,javascript,arrays,csv,d3.js,Javascript,Arrays,Csv,D3.js,我知道以前有人问过这个问题,但出于某种原因,他们的解决方案似乎对我不起作用 我试图用CSV文件中的数据填充两个阵列,其中: name,value alpha,34 beta,12 delta,49 gamma,89 我现在尝试的是 var field1=[]; var field2=[]; d3.csv("data.csv",function(csv){ csv.map(function(d){ field1.push(d.name);

我知道以前有人问过这个问题,但出于某种原因,他们的解决方案似乎对我不起作用

我试图用CSV文件中的数据填充两个阵列,其中:

name,value
alpha,34
beta,12
delta,49
gamma,89
我现在尝试的是

var field1=[];
var field2=[];

d3.csv("data.csv",function(csv){
            csv.map(function(d){
                field1.push(d.name);
                field2.push(+d.value);
            })
        });

console.log("field1",field1);
console.log("field2",field2);
当我在浏览器上查看console时,我看到:

field1数组[] field2数组[]

其中:

field1:
Array[0]
  0:"alpha"
  1:"beta"
  2:"delta"
  3:"gamma"

field2:
Array[0]
  0:34
  1:12
  2:49
  3:89
但是,当我尝试访问字段1[0]时,我得到的值为未定义

field1 undefined
我猜发生的是field1数组有一个“name”列的数组,但我也无法通过字段[0][0]访问第一个元素。我得到的是:

TypeError: field1[0] is undefined 
我对JavaScript非常陌生,我似乎不明白为什么数组不能作为一维数组正确填充,或者我是否做错了什么。我知道我可以在访问每行csv时遍历每行,但我希望将csv值存储在数组中,以便在脚本中全局使用

我浏览过的链接有:

但我似乎遗漏了什么或者忽略了什么。。请帮忙

原因是

d3.csv("data.csv",function(csv){
是一个ajax调用,因此您无法编写以下内容(您的控制台日志在ajax完成之前被调用,因此您会得到意外的结果):

正确的方法是:

var field1=[];
var field2=[];

d3.csv("data.csv",function(csv){
            csv.map(function(d){
                field1.push(d.name);
                field2.push(+d.value);
            })
            //called after the AJAX is success
            console.log("field1",field1);
            console.log("field2",field2);
            console.log("field1",field1[0]);
        });
工作代码


希望这有帮助

这管用!但是,是否不可能在csv读取之外以某种方式存储此数据,以便执行诸如连接多个csv文件中的数据并对其进行可视化处理之类的操作?如果不嵌套,您可以检查此答案或使用d3队列加载多个csv是,此解决方案是正确的,但不可扩展,如果您需要对CSV数据执行20或30次操作,则会导致无法读取的代码。愚蠢的异步方法!一定有更好的方法。。。
var field1=[];
var field2=[];

d3.csv("data.csv",function(csv){
            csv.map(function(d){
                field1.push(d.name);
                field2.push(+d.value);
            })
            //called after the AJAX is success
            console.log("field1",field1);
            console.log("field2",field2);
            console.log("field1",field1[0]);
        });