簡體   English   中英

如何將數據從D3.js Topojson合並到已定義的集合以設置類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM