如何从数组双向移除元素以计算可预约时段?
解决方案
核心思路是:先计算出禁止预约的起始边界(预订起始index向前偏移x个位置),然后筛选出不在[禁止起始边界, 预订结束index]范围内的时间点即可。
修改后的代码实现
// 定义需要向前移除的时间点数量x,根据业务需求设置,示例为1 const x = 1; // 计算禁止预约的起始index,用Math.max(0, ...)防止出现负数索引 const forbiddenStartIndex = Math.max(0, startTimeIndex - x); // 一次性筛选出所有可预约的时间点 const validAvailableHours = availableHours.filter((item, index) => { // 保留两种情况:索引小于禁止起始边界,或者索引大于预订结束index return index < forbiddenStartIndex || index > endTimeIndex; });
逻辑说明
- 计算禁止起始边界:用
startTimeIndex - x得到需要提前排除的起始位置,再通过Math.max(0, ...)确保不会出现负数(比如当预订起始index本身小于x时,避免索引越界)。 - 筛选逻辑优化:把原来两次filter合并成一次,更高效。只保留不在禁止区间内的时间点,自然就排除了预订时段和它前面x个会重叠的时段。
示例验证
拿你给出的时间数组[1:00, 2:00, 3:00, 4:00, 5:00, 6:00, 7:00]举例:
- 已有预订的
startTimeIndex=3(对应4:00),endTimeIndex=4(对应5:00),x=1 - 计算得到
forbiddenStartIndex=3-1=2 - 筛选后保留的索引是0、1、5、6,对应时间
[1:00,2:00,6:00,7:00],完全符合需求。
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

