如何识别连续预订的重叠日期并更新日期数组可用状态?
解决方案:标记同时存在入住退房的日期为不可用
核心思路
- 提取冲突日期:遍历预订数组,找出所有前一条记录的
end日期与后一条记录的start日期相同的日期,将这些日期存入集合(避免重复)。 - 更新可用状态:遍历日期数组,检查每个日期是否在冲突集合中,若是则将
available设为false。
JavaScript 实现示例
// 示例日期数组(7月每日数据) const dates = [ { date: '2023-07-04', available: true }, { date: '2023-07-05', available: true }, { date: '2023-07-06', available: true }, { date: '2023-07-07', available: true }, { date: '2023-07-08', available: true }, { date: '2023-07-09', available: true } ]; // 示例预订数组(包含相邻冲突日期) const reserved = [ { start: '2023-07-02', end: '2023-07-05' }, { start: '2023-07-05', end: '2023-07-07' }, { start: '2023-07-07', end: '2023-07-08' }, { start: '2023-07-08', end: '2023-07-10' } ]; // 1. 收集所有冲突日期 const conflictDates = new Set(); for (let i = 1; i < reserved.length; i++) { const prevRes = reserved[i - 1]; const currRes = reserved[i]; if (prevRes.end === currRes.start) { conflictDates.add(currRes.start); } } // 2. 更新日期数组的可用状态(不修改原数组) const updatedDates = dates.map(item => conflictDates.has(item.date) ? { ...item, available: false } : item ); console.log(updatedDates);
代码说明
- 使用
Set存储冲突日期,自动去重,避免同一日期被多次标记。 - 用
map方法返回新数组,保留原数组的完整性;若需直接修改原数组,可替换为forEach:dates.forEach(item => { if (conflictDates.has(item.date)) { item.available = false; } }); - 日期字符串直接对比即可,
YYYY-MM-DD格式的字符串顺序与实际日期顺序一致。
Python 实现示例
# 示例日期数组 dates = [ {"date": "2023-07-04", "available": True}, {"date": "2023-07-05", "available": True}, {"date": "2023-07-06", "available": True}, {"date": "2023-07-07", "available": True}, {"date": "2023-07-08", "available": True}, {"date": "2023-07-09", "available": True} ] # 示例预订数组 reserved = [ {"start": "2023-07-02", "end": "2023-07-05"}, {"start": "2023-07-05", "end": "2023-07-07"}, {"start": "2023-07-07", "end": "2023-07-08"}, {"start": "2023-07-08", "end": "2023-07-10"} ] # 1. 收集冲突日期 conflict_dates = set() for i in range(1, len(reserved)): prev_end = reserved[i-1]["end"] curr_start = reserved[i]["start"] if prev_end == curr_start: conflict_dates.add(curr_start) # 2. 更新日期数组的可用状态 updated_dates = [] for item in dates: updated_item = item.copy() if updated_item["date"] in conflict_dates: updated_item["available"] = False updated_dates.append(updated_item) print(updated_dates)
内容的提问来源于stack exchange,提问作者jeffci
相关产品推荐
相关产品推荐

