Javascript d3.csv函数类型是如何工作的?

Javascript d3.csv函数类型是如何工作的?,javascript,d3.js,Javascript,D3.js,我正在看关于D3.js的教程,我无法理解D3.csv函数是如何工作的 d3.csv("data.csv", type, function (myArrayOfObjects){ myArrayOfObjects.forEach(function (d){ console.log(d.x + d.y); }); }); function type(d){ d.x = parseFloat(d.x); d.y = parseFloat(d.y);

我正在看关于D3.js的教程,我无法理解D3.csv函数是如何工作的

d3.csv("data.csv", type, function (myArrayOfObjects){
    myArrayOfObjects.forEach(function (d){
      console.log(d.x + d.y);
    });
  });

 function type(d){
   d.x = parseFloat(d.x);
   d.y = parseFloat(d.y);
   return d;
  }
data.csv包含此值

x,y
100,100
130,120
80,180
180,80
180,40
该函数工作正常,在控制台上打印正确的值,但我无法理解对type函数的调用是如何工作的。 我原以为CSV文件中的每个元素都会调用一次type函数,但在插入console.log语句后,我注意到它只调用了一次。它如何获取所有数据,而不仅仅是第一对元素

多谢各位

编辑: 结果是:

200
250
260
260
220
函数是只调用一次还是对csv中的每个元素调用一次?

d3.csv
通过调用第二个参数来工作,它本质上是一个映射函数。说明您的示例相当于:

d3.request("data.csv")
    .mimeType("text/csv")
    .response(function(xhr) { return d3.csvParse(xhr.responseText, type); })
    .get(callback);
这是文档空间,它是
csvParse
的底层代码

dsv.parseRows(string[, row])
示例中指出,
实际上,row类似于对返回的行应用map和filter运算符。

我创建了一个小程序,演示了您的情况,但没有复制问题

更新


回答更新后的问题:如上所述,函数每行调用一次。

我很好奇为什么这被否决,以及我如何改进我的答案?不是我,但我想,这是因为你的假设是错误的。它被称为行转换函数,因为它是为每一行调用的。我去掉了最后一行,我说它只被调用一次,我想现在更准确了。但是,它如何符合OP的观察,它只被调用一次?我认为我们还没有看到完整的情况,这要么是不可复制的,要么是一种误解。。是的,根据MDN文档,每个实例都应该调用它。你能提供一个例子来说明这个问题吗?确切的控制台输出是什么?按照现在的方式,第一个代码片段应该打印
200.0、250.0、260.0、260.0、220.0
@Stefano我更新了我的答案,以反映您对问题的编辑。我想,将console.log放入type函数应该可以回答您的问题。请共享此测试!每个人都在说我们不能复制这种行为。