我正在尝试使用csv函数解析d3中的数据。我试图在处理过程中为每个数据点赋予一个新属性(Region)。在CSV函数之外,我定义了一个应该采用数据点的函数,检查状态是否为Alabama,如果是,则将Region属性分配给“North”或“South”字符串。
var parseRegion = (function(d){
if(d.State === "Alabama"){
return "South";
}
else {
return "North";
}
});
但是,当我运行代码时,会为每个数据点分配一个“Region”属性,该属性分配给函数本身。换句话说,它被赋予实际代码,而不是返回值。我做错了什么?
d3.csv("data.csv").get(function(error,data){
if (error) throw error;
data.forEach(function(d){
d.Deaths = +d.Deaths;
d.Population = +d.Population;
d.Year = parseDate(d.Year);
d.Region = parseRegion;
});
感谢您提供的任何帮助。最终我会在阿拉巴马州之外添加其他州。
答案 0 :(得分:2)
您的问题是您没有调用您定义的parseRegion函数。
所以你需要
d.Region = parseRegion(d);
更一般地说,d3.csv
提供了一种在不使用forEach
的情况下解析数据的方法。您可以执行以下操作:
d3.csv("data.csv")
.row(function(d) {
//Code to parse data row by row goes here
})
.get(function(error,data){
//Data is now the whole parsed dataset
});