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的隐含操作
- 通过
(endTime - startTime + 1) / interval计算总段数,用Math.ceil保证最后一段剩余时间也能被包含 - 用
Array.from生成对应长度的数组,在回调中直接计算每段的起止时间,全程无可变状态,符合函数式编程风格
内容的提问来源于stack exchange,提问作者Joji
相关产品推荐
相关产品推荐

