我在d3中有以下代码
const weeksOfYear = d3.nest()
.key(d => d.dateObj.week())
.sortKeys(d3.ascending)
.entries(pics);
d.dateObj
属性是Moment.js对象。 .week()
方法返回一个数字。
在d3.nest()
中,它将密钥转换为字符串值,因此我按字母顺序排序应该是一个数字顺序。
即,我的输出是:
1
10
11
12
13
2
20
21
22
23
...
我希望它订购1,2,3,4...
我还没有在文档中找到这个技巧。
答案 0 :(得分:5)
构建嵌套结构时,d3.nest()
在make use内部执行d3.map()
。而且,正如d3.map()
上的文档所示:
- 密钥被强制转换为字符串。
通过将keyValue
强制转换为字符串来构建嵌套结构时,会明确注意这一点:
if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
D3的比较器d3.ascending
在比较之前不会将字符串转换为数字。要对键进行数字比较,需要包装此比较器并事先进行转换:
const weeksOfYear = d3.nest()
.key(d => d.dateObj.week())
.sortKeys((a, b) => d3.ascending(+a, +b))
.entries(pics);