javascript - D3.js.nest 使用reduce进行累积和汇总
问题描述
我正在尝试使用从现有数组中获取累积总和D3.nest
。
learnjsdata.com 网站有这个例子,使用reduce
:
var landSum = data.reduce(function(sum, d) {
return sum + d.land_area;
}, 0);
console.log(landSum);
我试图将其调整d3.nest
rollup
为如下所示。
var caseByDate =
[
{
"report_date": "2020-03-30",
"case_count": 1
},
{
"report_date": "2020-04-03",
"case_count": 1
},
{
"report_date": "2020-04-07",
"case_count": 1
}
]
var caseByDateCum = d3.nest()
.key(function(d) { return d.report_date; })
.rollup(function(v) {
return v.reduce(function(sum, d) {
return sum + d.case_count;
}, 0);
})
.entries(caseByDate)
.map(function(group) {
return {
report_date: group.key,
cum_case_count: group.value
}
});
console.log(caseByDateCum);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
但不返回累积和,它只返回 cum_case_count 中的原始数据。我期望结果是:
var caseByDateCum =
[
{
"report_date": "2020-03-30",
"cum_case_count": 1
},
{
"report_date": "2020-04-03",
"cum_case_count": 2
},
{
"report_date": "2020-04-07",
"cum_case_count": 3
}
]
我找不到任何有助于描述如何使用reduce
ind3.nest
rollup
来获取累积总数的搜索。
Reduce
sum
应该是一个“累加器”,v
值是一个按值分组的数字数组key
。所以它应该在里面工作rollup
。
我错过了什么?
解决方案
我认为使用纯javascript会更容易:
let caseByDate = [
{
"report_date": "2020-03-30",
"case_count": 1
},
{
"report_date": "2020-04-03",
"case_count": 1
},
{
"report_date": "2020-04-07",
"case_count": 1
}
];
caseByDate.forEach(function (e) {
this.count = (this.count || 0) + e.case_count;
e.case_count = this.count;
}, Object.create(null));
console.log(caseByDate);
推荐阅读
- python - 如何在 Python 中删除目录中指定数量的文件?
- c# - 通过有效的 xpath 在 XmlDocument.SelectSingleNode 上返回 Null(尝试了旧答案)
- asp.net-mvc - HttpPost 方法解析错误的值(ASP.Net)
- c# - 检测 SplitContainer 的选择面板
- sql - 基于复合主键自动增加列
- elixir - 无法访问“conn”中的参数键
- google-analytics - 从 GA 迁移到 GTM - 需要哪些跟踪代码?
- neural-network - 如何从具有形状的数组中选择记录,例如(10,103)
- ios - “没有像 firebaseUI 这样的模块”
- javascript - MateiralizeCSS Timepicker:如何使用 momentJS 找到两个时间选择器之间的时间差,在 AM/PM 之前有一个空格?