Javascript 导入csv数据时分析带有日期的标题行

Javascript 导入csv数据时分析带有日期的标题行,javascript,csv,datetime,d3.js,Javascript,Csv,Datetime,D3.js,我正在使用d3导入一个CSV文件进行数据可视化。我的CSV文件包含需要转换为日期的标题行,以及需要转换为整数的数据: ISBN,2019-08,2019-09,2019-10 9782749205465,107,488,218 9789423069313,95,87,186 我可以使用以下方法导入CSV文件并将数据解析为整数: d3.csv("/assets/2019-20-download-stats.csv").then(function (data) { data.forEach(f

我正在使用d3导入一个CSV文件进行数据可视化。我的CSV文件包含需要转换为日期的标题行,以及需要转换为整数的数据:

ISBN,2019-08,2019-09,2019-10
9782749205465,107,488,218
9789423069313,95,87,186
我可以使用以下方法导入CSV文件并将数据解析为整数:

d3.csv("/assets/2019-20-download-stats.csv").then(function (data) {
  data.forEach(function(d) {
    d.ISBN = +d.ISBN;
    d['201908'] = +d['201908'];
    d['201909'] = +d['201909'];
    d['201910'] = +d['201910'];
  });
});
但标题行都是输出数组中的字符串,例如:

{
  "201908": 107,
  "201909": 488,
  "201910": 218,
  "ISBN": 9782749205465,
}

导入数据时如何格式化标题行?

这几乎肯定是一个问题。我看不到任何情况下,您的数据应该具有以日期为键的对象。除此之外,请注意,如果您将日期对象作为对象的键传递,JavaScript会自动将其转换为字符串。如果你(出于任何原因)真的想把日期作为关键,你应该使用一个

尽管如此,这里是您应该做的:在行转换函数中(代码中没有),检查日期

if (!isNaN(new Date(key).getTime()))
。。。如果您找到一个,请使用
newdate
生成密钥:

foo[new Date(key)] = +d[key]
下面是一个使用
d3.csvParse
的演示(这与您的
d3.csv
完全相同):

const csv=`ISBN,2019-082019-092019-10
9782749205465,107,488,218
9789423069313,95,87,186`;
const data=d3.csvParse(csv,行);
功能行(d){
const newObject={};
for(变量键在d中){
如果(!isNaN(新日期(key).getTime()){
新对象[新日期(键)]=+d[键]
}否则{
newObject[key]=+d[key]
}
};
返回newObject;
};
console.log(数据)