我想映射到每个省的数据城市。
这是我的示例csv数据。 (a.k.a'city.csv')
citycode,province,name
3704051,ProvinceA,city1
3704052,ProvinceA,city2
3704054,ProvinceA,city3
3704062,ProvinceA,city4
3704056,ProvinceA,city5
3704058,ProvinceA,city6
3704059,ProvinceA,city7
3704060,ProvinceB,city8
3704061,ProvinceB,city9
3704063,ProvinceB,city10
3702011,ProvinceC,city11
3702012,ProvinceC,city12
映射后,我希望得到省的所有东西。 例如,如果我输入值'省',则返回'3704051','3704052'..等等
首先,我必须阅读这样的数据。
var popByProvinceName = d3.map()
queue()
.defer(d3.json, "municipalities.json")
.defer(d3.csv, "city.csv", function(d) {
d.citycode = +d.citycode;
popByProvinceName.set(d.province, + d.citycode);
}).await(ready);
function ready(error, data1) {
console.log(popByProvinceName.get("ProvinceA");
}
只按省份返回一个城市代码。
3704059
我该如何解决?请帮忙!
答案 0 :(得分:1)
每次迭代都会覆盖该值。你需要将它们推入一个数组:
queue()
//.defer(d3.json, "municipalities.json")
.defer(d3.csv, "city.csv", function(d) {
d.citycode = +d.citycode;
// first time we've seen province
if (!popByProvinceName.has(d.province)) {
popByProvinceName.set(d.province, []);
}
// get the array and add to it
popByProvinceName.get(d.province).push(d.citycode);
}).await(ready);
完整code。
另一种更简洁的方法是在准备好的函数中使用d3.nest:
function ready(error, data1) {
var nest = d3.nest()
.key(function(d) { return d.province; })
.rollup(function(r){
return r.map(function(d){
return +d.citycode;
});
})
.entries(data1);
完整code。