[英]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在nest函數中提供了sortKeys方法,它將根據您選擇的鍵對嵌套列表進行排序。 您可以根據需要傳遞d3.ascending
或d3.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.