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

如何识别连续预订的重叠日期并更新日期数组可用状态?

解决方案:标记同时存在入住退房的日期为不可用

核心思路

  1. 提取冲突日期:遍历预订数组,找出所有前一条记录的end日期与后一条记录的start日期相同的日期,将这些日期存入集合(避免重复)。
  2. 更新可用状态:遍历日期数组,检查每个日期是否在冲突集合中,若是则将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:55:12