我在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...
我还没有在文档中找到这个技巧.
在d3.nest()
没有内部使用的d3.map()
建筑嵌套结构时.并且,正如文档所述d3.map()
:
密钥被强制转换为字符串.
通过强制keyValue
转换为字符串来构建嵌套结构时,会明确地处理这个问题:
if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
d3.ascending
在比较之前,D3的比较器不会将字符串转换为数字.要对键进行数字比较,您需要包装此比较器并事先进行转换:
const weeksOfYear = d3.nest() .key(d => d.dateObj.week()) .sortKeys((a, b) => d3.ascending(+a, +b)) .entries(pics);