我试图了解如何将文件读入javascript,我遇到的代码here真的让我陷入了循环。以下是我的想法:
我的问题:
你怎么能参考" d"在foreach循环之外?它不是循环的本地吗?什么变量类型是" d.sales",对对象d的某种引用?最后,哎呀" d.salesperson"得到了什么?
段:
d3.csv("sales.csv", function(error, data) {
if (error) throw error;
// format the data
data.forEach(function(d) {
d.sales = +d.sales;
});
// Scale the range of the data in the domains
x.domain(data.map(function(d) { return d.salesperson; }));
....
答案 0 :(得分:1)
如果您查看该页面的代码。 csv文件包含salesperson
和sales
1 - 您说正确读入文件并将内容分配给data
是正确的
2 - 种类。您应该查看forEach
的作用及其格式。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
但是,在这种情况下,d
是对数据中每个数据的引用。给定csv,每个数据都有sales
属性和salesperson
属性。
你怎么能参考" d"在foreach循环之外?它不是循环的本地吗?什么变量类型是" d.sales",对对象d的某种引用?最后,哎呀" d.salesperson"得到了吗?
d
只是一个参考。你可以任意命名。它只是对数据中每个数据的引用。它们不是d
,尽管它们引用相同的数据。
data.forEach(function(value, index, array){});
forEach
函数是一个循环,可以访问其循环的数据中的以下项,value
- 这是数组中的每个数据,index
这是索引该值,array
是数组本身。您的案例中的d
是赋予函数value
部分的名称。
当d3读入文件时,它会创建一个对象数组,每个对象都具有基于csv文件中标题的属性。在这种情况下它是这样的:
[{
"salesperson": "Bob",
"sales": 33
}, {
...
}]
在尝试拆分d3图之前,你应该真正做一些基本的javascript。此外,如果你不想尝试图形并且只是尝试读取csv文件,那么d3就是矫枉过正。
答案 1 :(得分:1)
使用JavaScript记住的一件好事是没有块级范围。那会让你感到不安,因为这不会是循环的第34个地方。但那真的对你没有帮助。 " d"只是一个任意命名的引用,它的作用域是每个函数,它出现在你的代码片段中。
d3.csv()函数读取文件并创建数据数组的每个元素,每个元素都包含sales和salesperson属性。