javascript - JavaScript/D3 getFullYear() 不是函数
问题描述
我在 JSON 对象中将日期格式化为“2020-04-01”。我将它们转换为日期如下:
for(var j = 0; j < json_data.length; j++) {
var timeParse = d3.timeParse("%Y-%m-%d");
json_data[j]["date"] = timeParse(json_data[j]["date"])
}
然后,我将 d3.nest 与汇总一起使用,按日期聚合我的数据:
const days =
d3.nest()
.key(function(d) { return d.date; })
.rollup(function(d) { return d3.sum(d, function(d) { return d.cases; }); })
.entries(json_data)
然后我尝试按年再次筑巢:
const years =
d3.nest()
.key(d => d.key.getFullYear())
.entries(days)
.reverse()
我得到 getFullYear() 不是函数的错误。我猜这是因为在某些时候我的数据值被转换为字符串而不是对象。
解决方案
这是预期的行为。如果您查看API,您会看到key()
:
注册一个新的键功能。将为输入数组中的每个元素调用 key 函数,并且必须返回一个字符串标识符以将元素分配给其组。(强调我的)
显而易见的解决方案是在循环中删除时间解析for
,并使用嵌套中的日期字符串。请注意,这可能会破坏您代码中的其他内容,但我们不能仅通过您发布的内容来判断它。
然后,在第二个嵌套中,您可以使用正则表达式或解析日期:
.key(d => timeParse(d.key).getFullYear())
最后,请记住(基于上面的引用),尽管getFullYear()
返回了一个数字,但该数字将被转换为一个字符串。
推荐阅读
- reactjs - 如何从 axios 访问数据?
- javascript - 在 onChange 之后 React 输入字段重新渲染
- python - 尝试使用 python 制作自动点击器
- c++ - 如何使科学计数法的转换更精确?
- apache-spark - 火花数据帧行上的映射函数以解析结构类型
- r - 子集并将列表转换为数据框
- powerbi - Power BI Measure 计算基于 ID、类型和日期的总小时数
- html - Bootstrap 4.5.0 响应式网格失败
- flutter - 如何将孩子(带有文本的容器)定位在底部并使其宽度与他的sybilings相同并将文本保持在中心
- php - 试图在单页中获取帖子的详细信息