[英]How to merge data from D3.js Topojson to defined set to set class
因此,我正在使用D3.js的Topojson功能來創建svg世界地圖。 盡管d3相對較新,但到目前為止,我已經設法弄清了比例和所有方面。 我遇到的問題是嘗試使用已定義的一些集合合並或過濾來自topojson文件的數據。 我將省略用於投影的功能。 這是我到目前為止的內容:
var svg = d3.select("#map svg");
var regions = [
{
region: 'low',
set: d3.set([ "USA", "CAN" ])
},
{
region: 'med',
set: d3.set([ "AUS" ])
},
{
region: 'high',
set: d3.set([ "RUS" ])
}
];
d3.json("site/js/topo.json", function(error, topology) {
// INDIVIDUAL COUNTRIES
svg.selectAll("path")
.data(topojson.feature(topology, topology.objects.worldByIso).features)
.enter()
.append("path")
.attr("data-iso", function(d){
return d.properties.iso;
})
.attr("d", path);
});
我可以將topojson文件中的d.properties.iso值返回到data屬性,但是我真正想做的是對照“ regions”數組檢查iso屬性,以代替返回region(低, med或high)(如果與集合匹配)。
理想情況下,該解決方案無需每次都遍歷“區域”進行檢查,因此可以快速進行處理。 希望這一切都有道理,我正在寫這本書,因為我超時加班了!
數組減少
我想你想要Array.reduce() 。 這將使您將數組折疊為單個值。 我將您的d3.sets更改為簡單數組,因此可以使用contains()
方法,但是快速瀏覽d3文檔看起來就像它們的集具有has()
。
var regions = [{ region: 'low', set: ["USA", "CAN"] }, { region: 'med', set: ["AUS"] }, { region: 'high', set: ["RUS"] } ]; let getRegion = r => regions.reduce((a, c) => c.set.includes(r) ? c.region : a, null); console.log(getRegion('AUS')); console.log(getRegion('USA')); console.log(getRegion('EUR'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.