You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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);

代码解释

  1. 星期名称数组:weekDays固定了输出的顺序,避免因为对象遍历顺序不一致导致结果混乱
  2. reduce分组求和:
    • 用new Date(item.date).getDay()把时间戳转换成星期索引(0=周日,6=周六),再对应到星期名称
    • 遍历原始数组,把每个item的value累加到对应星期的总和里
  3. 生成结果数组:遍历weekDays,每个星期从分组对象里取总和,没有的话就设为0,确保每个星期都有对应的条目

运行这段代码后,你就能得到符合要求的输出数组,完美适配图表展示的需求~

内容的提问来源于stack exchange,提问作者Josiel Faleiros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:44:45