如何在JS中按星期分组计算数组内每日数值的总和?
按星期几分组计算金额总和的解决方案
没问题,这就帮你实现把给定的时间戳金额数组,按星期几分组求和的需求,而且保证输出是Sun到Sat的固定顺序,没有数据的星期总和为0。
实现思路拆解
- 首先得有一个固定顺序的星期几名称数组,保证输出的顺序符合要求:
['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] - 把原始数组中的每个时间戳转换成对应的星期几,用
reduce方法分组累加金额 - 最后遍历固定星期数组,把每个星期的累加值(没有则为0)组装成目标格式的数组
完整代码实现
// 原始输入数组 const data = [ { date: 1525655429184, value: 20.00 }, { date: 1525655429184, value: 3.99 }, { date: 1526001029184, value: 19.00 }, { date: 1526001025184, value: 4.30 } ]; // 固定顺序的星期名称数组 const weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; // 第一步:分组累加每个星期几的金额 const groupedSum = data.reduce((acc, item) => { // 将时间戳转换为Date对象,getDay()返回0(周日)到6(周六) const dayIndex = new Date(item.date).getDay(); const dayName = weekDays[dayIndex]; // 累加金额,不存在则初始化为0 acc[dayName] = (acc[dayName] || 0) + item.value; return acc; }, {}); // 第二步:生成目标格式的数组,保证顺序且补全0值 const result = weekDays.map(day => ({ day, sum: groupedSum[day] || 0 })); console.log(result);
代码解释
- 星期名称数组:
weekDays固定了输出的顺序,避免因为对象遍历顺序不一致导致结果混乱 - reduce分组求和:
- 用
new Date(item.date).getDay()把时间戳转换成星期索引(0=周日,6=周六),再对应到星期名称 - 遍历原始数组,把每个item的value累加到对应星期的总和里
- 用
- 生成结果数组:遍历
weekDays,每个星期从分组对象里取总和,没有的话就设为0,确保每个星期都有对应的条目
运行这段代码后,你就能得到符合要求的输出数组,完美适配图表展示的需求~
内容的提问来源于stack exchange,提问作者Josiel Faleiros
相关产品推荐
相关产品推荐

