如何将数组name值作为新数组键名、按日期聚合count得到目标结构数组
数组按日期分组聚合转换实现
实现思路
- 以日期为键创建临时映射对象,存储每个日期的聚合数据
- 遍历原数组完成每个日期下的人员count写入和总count累加
- 提取临时映射对象的值得到最终结果数组
代码实现
const originalArr = [ {date:'27-06-2021',name:'John Doe',count:2}, {date:'29-06-2021',name:'John Doe',count:1}, {date:'29-06-2021',name:'George Newman',count:1}, ]; const dateGroup = {}; originalArr.forEach(record => { const currDate = record.date; // 初始化日期分组 if (!dateGroup[currDate]) { dateGroup[currDate] = { date: currDate, sumCount: 0 }; } // 写入对应人员的count值,若同一日期同一人员有多条记录可改为累加模式 dateGroup[currDate][record.name] = record.count; // 累加当日总count dateGroup[currDate].sumCount += record.count; }); // 转为目标数组结构 const result = Object.values(dateGroup);
输出结果
执行上述代码后result的值和要求的结构完全一致:
[ {date:'27-06-2021','John Doe':2,sumCount:2}, {date:'29-06-2021','John Doe':1,'George Newman':1,sumCount:2} ]
如果同一日期下存在同一人员的多条记录,只需要将赋值语句dateGroup[currDate][record.name] = record.count修改为dateGroup[currDate][record.name] = (dateGroup[currDate][record.name] || 0) + record.count即可实现人员count累加
内容的提问来源于stack exchange,提问作者Bar Levin
相关产品推荐
相关产品推荐

