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