如何基于工作日小时数组实现任务的间隔显示设置?
解决方案
方法一:固定间隔(每隔一行显示任务)
如果需要严格按照示例中“每隔一行显示一次清洁任务”的规则,同时控制总任务次数不超过设定值,可以用以下代码:
let daySchedule = ["08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00"]; let taskQuota = 2; // 每日需执行的任务次数 let taskDescription = "Cleaning"; let completedTasks = 0; // 遍历日程数组生成结果 for (let i = 0; i < daySchedule.length; i++) { let scheduleLine; // 奇数索引(从0开始)且未用完任务配额时,渲染加粗的清洁任务 if (i % 2 === 1 && completedTasks < taskQuota) { scheduleLine = `**${daySchedule[i]} - ${taskDescription}**`; completedTasks++; } else { scheduleLine = `${daySchedule[i]} - Coffee break`; } // 输出结果(可根据需求替换为DOM操作或其他逻辑) console.log(scheduleLine); }
方法二:均匀分布任务(适配不同任务次数)
如果需要根据设定的任务次数,在整个时间段内均匀分配清洁任务,而不是固定间隔一行,可使用以下逻辑:
let daySchedule = ["08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00"]; let taskQuota = 2; // 每日需执行的任务次数 let taskDescription = "Cleaning"; let defaultTask = "Coffee break"; // 计算任务间隔,确保任务均匀分布 const interval = Math.floor(daySchedule.length / (taskQuota + 1)); let nextTaskPosition = interval; let completedTasks = 0; for (let i = 0; i < daySchedule.length; i++) { let scheduleLine = `${daySchedule[i]} - ${defaultTask}`; if (i === nextTaskPosition && completedTasks < taskQuota) { scheduleLine = `**${daySchedule[i]} - ${taskDescription}**`; completedTasks++; nextTaskPosition += interval; } console.log(scheduleLine); }
代码说明
- 两种方法都通过
completedTasks变量控制任务次数,避免超过设定的taskQuota。 - 方法一适合固定交替显示的场景,方法二适合需要均匀分散任务的场景。
- 最终输出的清洁任务用
**包裹实现加粗效果,和示例格式一致。
内容的提问来源于stack exchange,提问作者Victorderidder76
相关产品推荐
相关产品推荐

