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

JavaScript:更简洁实现指定频率的时间间隔数组生成函数

更简洁的函数式风格实现generateIntervals函数

需求回顾

函数generateIntervals需接收三个参数:

  • startTime: 起始时间(秒)
  • endTime: 结束时间(秒)
  • frequency: 间隔频率,可选值为minute、hour或day

返回按指定频率划分的时间间隔子数组组成的数组,示例如下:

generateIntervals(0, 60, 'minute') // [[0, 59], [60, 60]]
generateIntervals(0, 200, 'hour') // [[0, 200]]

原实现代码

const intervalMap = {
  minute: 60,
  hour: 3600,
  day: 86400,
}

function generateIntervals(startTime, endTime, frequency) {
  const interval = intervalMap[frequency] - 1
  const chunked = []
  let curr = startTime

  while (curr <= endTime) {
    const end = Math.min(endTime, curr + interval)
    chunked.push([curr, end])
    curr = end + 1
  }

  return chunked
}

函数式风格优化实现

可以利用Array.from替代显式循环,消除可变变量,实现更简洁的函数式写法:

const intervalMap = {
  minute: 60,
  hour: 3600,
  day: 86400,
}

const generateIntervals = (startTime, endTime, frequency) => {
  const interval = intervalMap[frequency];
  // 计算需要划分的总段数,确保覆盖所有时间点
  const totalChunks = Math.ceil((endTime - startTime + 1) / interval);
  return Array.from({ length: totalChunks }, (_, index) => {
    const chunkStart = startTime + index * interval;
    const chunkEnd = Math.min(endTime, chunkStart + interval - 1);
    return [chunkStart, chunkEnd];
  });
};

优化思路说明

  1. 直接使用间隔的原始秒数,逻辑更直观,避免提前减1的隐含操作
  2. 通过(endTime - startTime + 1) / interval计算总段数,用Math.ceil保证最后一段剩余时间也能被包含
  3. 用Array.from生成对应长度的数组,在回调中直接计算每段的起止时间,全程无可变状态,符合函数式编程风格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:35:48