Javascript d3.csv函数类型是如何工作的?
我正在看关于D3.js的教程,我无法理解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.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函数应该可以回答您的问题。请共享此测试!每个人都在说我们不能复制这种行为。