我在 d3 中有以下代码
const weeksOfYear = d3.nest()
.key(d => d.dateObj.week())
.sortKeys(d3.ascending)
.entries(pics);
d.dateObj
属性是一个 Moment.js 对象。 .week()
方法返回一个数字。
Somehwere 在 d3.nest()
中,它将键转换为字符串值,因此我按字母顺序排序应该是数字顺序。
即,我的输出是:
1
10
11
12
13
2
20
21
22
23
...
而我希望它按顺序 1,2,3,4...
我还没有在文档中找到诀窍。
最佳答案
分析
d3.nest()
在内部执行 make use的 d3.map()
在构建嵌套结构时。而且,正如关于 d3.map()
的文档中所说:
- Keys are coerced to strings.
这在通过强制 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);
关于d3.js - d3.nest 将键转为字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41579465/