Javascript 无法访问d3.csv()方法的回调函数中的“我的数据”

Javascript 无法访问d3.csv()方法的回调函数中的“我的数据”,javascript,csv,d3.js,Javascript,Csv,D3.js,回调函数draw似乎无法访问提供给d3.csv()的回调中的数据。在回调控制台中。log打印: 数据:空 背景信息:我的实际目标是使用类似Age或SURVIED的列作为x轴的范围。您的行转换函数,即d3.csv()的第二个参数不正确。有关详细信息,请查看: 如果指定了行转换函数,则为每一行调用指定的函数,并传递一个表示当前行(d)、第一个非标题行从零开始的索引(i)以及列名数组的对象。如果返回的值为空或未定义,则跳过该行,并将从dsv.parse返回的数组中进行committed;否则,返回值将

回调函数
draw
似乎无法访问提供给
d3.csv()
的回调中的数据。在回调
控制台中。log
打印:

数据:空


背景信息:我的实际目标是使用类似Age或SURVIED的列作为x轴的范围。

您的行转换函数,即
d3.csv()
的第二个参数不正确。有关详细信息,请查看:

如果指定了行转换函数,则为每一行调用指定的函数,并传递一个表示当前行(
d
)、第一个非标题行从零开始的索引(
i
)以及列名数组的对象。如果返回的值为空或未定义,则跳过该行,并将从dsv.parse返回的数组中进行committed;否则,返回值将定义相应的行对象

有两个问题:

  • 函数是为每一行调用的,而不是像您的函数应该被调用那样为整个数据调用的

  • 正如Adrian在他的文章中指出的,您需要返回行的值;否则,将跳过该行

  • 以下函数应该可以实现此功能:

    d3.csv("modified_data_titanic.csv", function(d) {  // in this case d is one row
      d.Age = +d.Age;
      d.Survived = +d.Survived;
      return d;
    }, draw);
    
    访问器(或行)函数不正确

    对于start,accessor函数不需要forEach。除此之外,您还必须返回每一行。总的来说,这些变化是:

    d3.csv("modified_data_titanic.csv", function(d) {
         d.Age = +d.Age;
         d.Survived = +d.Survived;
         return d;
     }, draw);
    

    返回forEach之后的数据<代码>data.forEach(函数(d){d.Age=+d.Age;d.surved=+d.surved;});返回数据Thx很多。因为这篇文章,我使用了
    forEach
    :如果你重新阅读这篇文章,你会注意到有两种方法。第一个代码段使用两个参数调用
    d3.csv()
    ,其中没有提供转换函数。第二个参数是可选的!在回调中,
    数据
    将保存完整的解析行数组。这可以使用
    .forEach()
    进行迭代。然而,下面几段中的第二个代码片段确实提供了一个转换函数,即提供了三个参数,如您的问题中所述。选择哪种方式在很大程度上取决于您对数据预处理和后处理的需要。Thx很多。因为这篇文章,我使用了
    forEach
    d3.csv("modified_data_titanic.csv", function(d) {  // in this case d is one row
      d.Age = +d.Age;
      d.Survived = +d.Survived;
      return d;
    }, draw);
    
    d3.csv("modified_data_titanic.csv", function(d) {
         d.Age = +d.Age;
         d.Survived = +d.Survived;
         return d;
     }, draw);