按照csv文件的顺序读取列

时间:2015-01-25 12:31:14

标签: javascript csv d3.js

从csv文件加载数据时,是否可以获取列的顺序?

E.g。加载csv文件的典型方法是调用d3.csv函数:

d3.csv("data.csv", function(error, data) {
var ageNames = d3.keys(data[0]).filter(function(key) { return key !== "State"; });

通常,列存储为对象的属性,因此无法再检索订单。此外,d3.keys()返回一个未定义顺序的数组。

我问这个是因为我想按csv文件中的顺序对列进行排序。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您不需要使用列的名称来访问数据,您可以使用键的索引。索引由文件中的顺序决定,因此正是您要查找的内容。

要获取对象的键,请使用Object.keys()

var keys = Object.keys(data[0]);
data[0][keys[0]]; // datum in the first row, first column

答案 1 :(得分:0)

从关系视图来看,d3.js从文件中读取的方式具有相反的特性似乎令人惊讶:

关系视图:

  • 行没有任何保证订单
  • 列具有明确定义的顺序,可通过引用其位置来解决

(csv文件的)d3.js视图:

  • 行具有明确定义的顺序,可以通过引用其行号来解决。 (它们存储在一个数组中)
  • 列最终作为Object中的一组属性,因此它们没有明确定义的顺序

如果要像在csv文件中那样访问列的顺序,可以安全地假设“for ... in ..”循环遍历属性或 d3。 keys()以给定的顺序返回列。 如果添加或删除列,则可以销毁此订单。这对于大多数实际应用并非如此。

另见https://javascriptweblog.wordpress.com/2011/01/04/exploring-javascript-for-in-loops/。所描述的一个例外情况是:当列名称是唯一的数字时,Chrome浏览器会根据订单数量顺序对其进行排序。