You need to enable JavaScript to run this app. JavaScript给定时间范围下计算每日平均阅读时长并存入30天数组
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript给定时间范围下计算每日平均阅读时长并存入30天数组

每日平均阅读时长统计的实现方案

核心逻辑说明

原代码仅统计了每日的阅读记录条数,缺少计算平均值必需的两个统计维度:当日累计总阅读时长、当日有效记录数,无法直接通过现有计数值推导平均结果。整体实现拆为「累计双维度基础值→逐位计算最终平均值」两步即可,同时需要修正原代码的两处问题:

  • 原代码直接把getDate()返回的日数作为数组索引,未做0起始的索引偏移,会导致1号的记录存在索引1的位置,30号的记录直接超出长度为30的数组边界
  • 原代码的forEach语法缺失闭合右括号,运行时会直接触发语法错误

可直接运行的修正代码

// 初始化两个长度为30的统计数组,初始值均为0
// sumArr 存储当日累计阅读总时长
// countArr 存储当日有效阅读记录的条数
const sumArr = new Array(30).fill(0);
const countArr = new Array(30).fill(0);

bookDetails.forEach((obj) => {
  // 把日期对应的“当月第几天”转成数组索引:1号对应索引0,30号对应索引29
  const dayIndex = new Date(obj.date).getDate() - 1;
  // 累计当日阅读总时长
  sumArr[dayIndex] += obj.readingTime;
  // 当日记录数自增
  countArr[dayIndex] += 1;
});

// 逐位计算每日平均阅读时长
const dailyAvgReadTime = sumArr.map((totalTime, index) => {
  // 当日没有有效记录时返回0,有记录则用总时长除以记录数得到平均值
  return countArr[index] === 0 ? 0 : totalTime / countArr[index];
});

结果匹配验证

代码运行后生成的数组和预期输出完全一致:

  • 19号(对应数组索引18):总阅读时长为1231+909=2140,共2条记录,计算得平均值1070
  • 20号(对应数组索引19):总阅读时长为190,共1条记录,平均值为190
  • 21号(对应数组索引20):总阅读时长为1254+10=1264,共2条记录,计算得平均值632
  • 其余无阅读记录的日期对应值均为0

实用提示:如果统计的月份不是30天(如2月、大小月),可以根据实际月份动态计算数组长度,避免出现索引越界问题。

内容的提问来源于stack exchange,提问作者Siva Pradhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 12:54:08