我目前正在尝试使用 D3 在波多黎各地图上构建一个等值线。使用Scott Murray 关于 Choropleths 的示例,我正在尝试将数据绑定到波多黎各的每个城市。我有一个占位符空对象来保存从 CSV 提供的数据,如下所示:
var properties = {};
然后,我继续逐行读取 CSV 文件。我将相应的值分配给一些变量,如下所示:
properties.dataID = parseFloat(data[i].id);
properties.dataMunic_Total = parseFloat(data[i].municipio_total);
//etc.
一切都很好,花花公子。我 console.log 检查数据是否存储正确:
console.log(properties.dataID);
//Displays 1, which is correct.
但是,当我尝试访问整个对象时:
console.log(properties);
它只显示 CSV 文件的最后一行。我在第一个 for 循环中运行了最后一个 console.log() 语句,在将数据分配给对象的属性之后立即运行,并且每次循环遍历 console.log() 时,它只显示 CSV 文件的最后一行.
当我尝试将对象属性分配给我的地图对象(市政当局)时,它所分配的只是 CSV 文件的最后一行。所以我尝试单独设置它们,看到这似乎有效。但是,JavaScript 抱怨该属性在对象中不存在:
obj.geometries[j].properties.year[properties.dataYear - 2000].id = properties.dataID;
Uncaught TypeError: Cannot read property 'id' of undefined
我尝试将它初始化为一个新变量:
var obj.geometries[j].properties.year[properties.dataYear - 2000].id = properties.dataID;
但后来我在控制台上得到了这个:
Uncaught SyntaxError: Unexpected identifier
除了语法错误之外,我认为这主要是因为我在每个自治市附加了一个数组,所以我每年可以保存不同的数据集......但我不明白 JavaScript 为什么会这样。
我的问题是:为什么我的对象会这样?d3.csv 有问题吗?难道我做错了什么?