按 csv 文件的顺序读取列
Reading columns in their order of the csv file
从 csv 文件加载数据时,是否可以获取列的顺序?
例如加载 csv 文件的典型方法是调用 d3.csv 函数:
d3.csv("data.csv", function(error, data) {
var ageNames = d3.keys(data[0]).filter(function(key) { return key !== "State"; });
通常,列存储为对象的属性,因此无法再检索顺序。此外,d3.keys() returns 一个未定义顺序的数组。
我问这个是因为我想按 csv 文件中的顺序对列进行排序。任何帮助将不胜感激。
您不需要使用列名来访问数据,您可以使用键的索引。索引由文件中的顺序决定,因此正是您要查找的内容。
要获取对象的键,请使用 Object.keys()
:
var keys = Object.keys(data[0]);
data[0][keys[0]]; // datum in the first row, first column
从关系观点来看,d3.js 从文件读取的方式具有相反的属性似乎令人惊讶:
关系视图:
- 行没有任何保证顺序
- 列有明确的顺序,可以通过参考它们的位置来解决
d3.js 视图(csv 文件):
- 行具有明确定义的顺序,可以通过参考行号来解决。 (它们存储在一个数组中)
- 列最终作为对象中的一组属性,因此它们没有明确定义的顺序
如果您想访问 csv 文件中的列顺序,您可以安全地假设 "for...in.." 循环属性或 d3.keys() returns 给定顺序的列。
如果添加或删除列,则可以破坏此顺序。这对于大多数实际应用来说并非如此。
另见 https://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/。所描述的一个例外是:当列名是唯一的数字时,Chrome 浏览器根据它们的数字顺序而不是它们的列顺序对其进行排序。
从 csv 文件加载数据时,是否可以获取列的顺序?
例如加载 csv 文件的典型方法是调用 d3.csv 函数:
d3.csv("data.csv", function(error, data) {
var ageNames = d3.keys(data[0]).filter(function(key) { return key !== "State"; });
通常,列存储为对象的属性,因此无法再检索顺序。此外,d3.keys() returns 一个未定义顺序的数组。
我问这个是因为我想按 csv 文件中的顺序对列进行排序。任何帮助将不胜感激。
您不需要使用列名来访问数据,您可以使用键的索引。索引由文件中的顺序决定,因此正是您要查找的内容。
要获取对象的键,请使用 Object.keys()
:
var keys = Object.keys(data[0]);
data[0][keys[0]]; // datum in the first row, first column
从关系观点来看,d3.js 从文件读取的方式具有相反的属性似乎令人惊讶:
关系视图:
- 行没有任何保证顺序
- 列有明确的顺序,可以通过参考它们的位置来解决
d3.js 视图(csv 文件):
- 行具有明确定义的顺序,可以通过参考行号来解决。 (它们存储在一个数组中)
- 列最终作为对象中的一组属性,因此它们没有明确定义的顺序
如果您想访问 csv 文件中的列顺序,您可以安全地假设 "for...in.." 循环属性或 d3.keys() returns 给定顺序的列。 如果添加或删除列,则可以破坏此顺序。这对于大多数实际应用来说并非如此。
另见 https://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/。所描述的一个例外是:当列名是唯一的数字时,Chrome 浏览器根据它们的数字顺序而不是它们的列顺序对其进行排序。