d3.js - d3.nest 将键转为字符串值

标签 d3.js

我在 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 used3.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/

相关文章:

javascript - 如何延迟循环?或者如何让循环变慢?

javascript - D3 js强制布局中如何定义节点进入位置

javascript - D3 : Creating scatter plot for multiple values

javascript - d3.js 中单元格尺寸太小时删除文本

d3.js - d3.geo.path() 在 map 上绘制多条路线

javascript - 图例颜色并不总是对应于值

d3.js - 使用自定义键的数据连接无法按预期工作

javascript - 具有嵌套 json 属性的行

javascript - D3 力导向图方向

javascript - d3js : Unable to set a value to . attr ("font-size") 正确,在两者之间使用 if else 检查函数