我在d3中有以下代码
const weeksOfYear = d3.nest()
.key(d => d.dateObj.week())
.sortKeys(d3.ascending)
.entries(pics);
Run Code Online (Sandbox Code Playgroud)
该d.dateObj属性是Moment.js对象.该.week()方法返回一个数字.
有些人d3.nest()把它变成了一个字符串值,因此我按字母顺序排序应该是一个数字顺序.即,我的输出是:
1
10
11
12
13
2
20
21
22
23
...
Run Code Online (Sandbox Code Playgroud)
虽然我想要它订购 1,2,3,4...
我还没有在文档中找到这个技巧.
在d3.nest()没有内部使用的d3.map()建筑嵌套结构时.并且,正如文档所述d3.map():
- 密钥被强制转换为字符串.
通过强制keyValue转换为字符串来构建嵌套结构时,会明确地处理这个问题:
if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
Run Code Online (Sandbox Code Playgroud)
d3.ascending在比较之前,D3的比较器不会将字符串转换为数字.要对键进行数字比较,您需要包装此比较器并事先进行转换:
const weeksOfYear = d3.nest()
.key(d => d.dateObj.week())
.sortKeys((a, b) => d3.ascending(+a, +b))
.entries(pics);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |