簡體   English   中英

d3.js按匯總字段排序

[英]d3.js sorting by rollup field

我有一個JSON數據,我想按一個字段分組,然后按計數排序。

var data = [{"Name":"Ravi","Country":"India"},
            {"Name":"Alex","Country":"USA"},
            {"Name":"Stew","Country":"UK"},
            {"Name":"Mary","Country":"India"},
            {"Name":"Raju","Country":"India"},
            {"Name":"Bill","Country":"UK"},
            {"Name":"Elisa","Country":"UK"},
            {"Name":"Sharma","Country":"India"}];

我的d3.js查詢如下

var countryCount = d3.nest()
                    .key(function(d) { return d.Country; })
                    .rollup(function(a){return a.length;})
                    .entries(data);
console.log(JSON.stringify(countryCount));

我的輸出是

[{"key":"India","values":4},{"key":"USA","values":1},{"key":"UK","values":3}]

通過我想要的輸出是(按匯總值排序)

[{"key":"India","values":4},{"key":"UK","values":3},{"key":"USA","values":1}]

我怎樣才能做到這一點? 我知道以下瀏覽器默認排序方法也可以提供所需的輸出。 但是只是想弄清楚d3.js是否提供了任何內置方法來實現此目的

console.log(JSON.stringify(countryCount.sort(function (a, b){
    if (a.values > b.values) {return -1;} 
    else if (a.values < b.values) { return 1;} 
    else  return 0;
})));

D3提供了條件, 上升 下降 ,你可以在里面使用的排序方法 不用擔心,您正在使用具有良好穩定性的本機javascript方法

var countryCount = d3.nest()
                    .key(function(d) { return d.Country; })
                    .rollup(function(a){return a.length;})
                    .entries(data)
                    .sort(function(a, b){ return d3.ascending(a.values, b.values); })

console.log(JSON.stringify(countryCount));

d3在nest函數中提供了sortKeys方法,它將根據您選擇的鍵對嵌套列表進行排序。 您可以根據需要傳遞d3.ascendingd3.descending

從您的示例:

var countryCount = d3.nest()
                    .key(function(d) { return d.Country; })
                    .sortKeys(d3.ascending)
                    .entries(data);

這將為您提供:

[{"key":"India","values":4},{"key":"UK","values":3},{"key":"USA","values":1}]

不,沒有內置函數可以提供您想要的結果。 d3.nest()確實具有方法nest.sortValues() ,該方法nest.sortValues()嵌套數據的葉子元素進行排序,但這在您的情況下是沒有意義的,因為您確實應用了.rollup() ,每個鍵只留下了一個葉子。 正如您已經提到的,方法是使用Array.prototype.sort()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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