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

JavaScript中用reduce处理对象数组按天统计时长遇targetDay错误求助

解决按天统计每周时长的问题

看起来你是卡在了日期映射到星期几的环节上,我来给你一套完整的解决方案,顺便排查targetDay相关的常见错误:

完整代码示例(JavaScript)

假设你的输入数据是类似这样的格式:

const timeEntries = [
  { date: '2024-02-04', hours: 4, otherField: 'xxx' }, // 对应周日
  { date: '2024-02-07', hours: 5, otherField: 'yyy' }, // 对应周三
  // 其他更多时间条目...
];

下面是可以直接运行的统计逻辑:

// 定义一周的显示顺序(按你的示例要求从周日开始)
const weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];

// 初始化统计数组,每个元素对应某天的总时长,初始值为0
const dailyHours = new Array(weekDays.length).fill(0);

// 遍历所有条目进行统计
timeEntries.forEach(entry => {
  const date = new Date(entry.date);
  // Date.getDay() 返回 0(周日)到 6(周六),正好对应weekDays的索引
  const dayIndex = date.getDay();
  // 累加时长,同时兼容hours可能不是数字的情况
  dailyHours[dayIndex] += parseFloat(entry.hours) || 0;
});

// 拼接成你需要的输出格式:星期缩写 + 对应时长
const output = [...weekDays, ...dailyHours].join(' ');
console.log(output);
// 输出结果:Sun Mon Tue Wed Thu Fri Sat 4 0 0 5 0 0 0

排查targetDay错误的核心要点

你遇到的targetDay相关问题,大概率是在日期到星期索引的映射上出了问题,常见的坑有这几个:

  • 混淆getDay()返回值:Date.getDay()返回的是0(周日)到6(周六),如果误以为1是周日,会直接导致索引偏移,甚至触发数组越界错误。
  • 星期数组顺序不匹配:比如你的星期显示数组是从周一开始的,但统计逻辑用了周日为0的索引,会导致统计结果完全错位。
  • 日期格式无效:如果entry.date的格式不被Date对象识别,会返回无效日期,导致dayIndex变成NaN,进而操作数组时出错。

适配你示例的特殊输出(若确实需要省略周四)

如果你的示例里确实不需要显示周四(可能是笔误),可以调整映射逻辑来匹配:

const weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Fri', 'Sat'];
// 建立系统星期索引到我们显示数组的映射
const dayMapping = { 0:0, 1:1, 2:2, 3:3, 5:4, 6:5 };

const dailyHours = new Array(weekDays.length).fill(0);

timeEntries.forEach(entry => {
  const date = new Date(entry.date);
  const dayIndex = date.getDay();
  // 只处理我们需要的星期几,自动忽略周四
  if (dayMapping.hasOwnProperty(dayIndex)) {
    dailyHours[dayMapping[dayIndex]] += parseFloat(entry.hours) || 0;
  }
});

const output = [...weekDays, ...dailyHours].join(' ');
console.log(output);
// 输出结果:Sun Mon Tue Wed Fri Sat 4 0 0 5 0 0

如果你的业务场景用的是其他语言(比如Python),可以告诉我,我再调整对应的实现~

内容的提问来源于stack exchange,提问作者Amer Bearat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:08:14