我正在工作的班次调度系统,需要协助合并两个数组的班次对象.每个移位对象定义如下:
type Shift = { start: Date, end: Date, users: string[] }
个
第一个数组表示即将到来的移位,其中连续元素的结束时间和开始时间之间没有间隔.第二个数组包含"覆盖",这是分散的移位,可以设置为任何时间而不重叠.
我的目标是将这两个数组合并到一个表示最终排班表的数组中.然而,我正在努力处理所有的变化,例如覆盖整个班次或发生在班次中间的覆盖.
有没有适用于这种情况的数据 struct ,以及可以帮助我高效实现此计算的任何算法方法?
--编辑--
移位数组-
[
{start: "01-07-2023 00:00", end: "02-07-2023 00:00", users: ['a']},
{start: "02-07-2023 00:00", end: "03-07-2023 00:00", users: ['b']},
{start: "03-07-2023 00:00", end: "04-07-2023 00:00", users: ['c']},
{start: "04-07-2023 00:00", end: "05-07-2023 00:00", users: ['a']},
{start: "05-07-2023 00:00", end: "06-07-2023 00:00", users: ['b']}
]
覆盖:
[
{start: "01-07-2023 10:00", end: "01-07-2023 15:00", users: ['d']},
{start: "04-07-2023 01:00", end: "05-07-2023 12:00", users: ['e']},
{start: "02-07-2023 00:00", end: "03-07-2023 00:00", users: ['f']}
]
最终结果-
[
{start: "01-07-2023 00:00", end: "01-07-2023 10:00", users: ['a']},
{start: "01-07-2023 10:00", end: "01-07-2023 15:00", users: ['d']},
{start: "01-07-2023 15:00", end: "02-07-2023 00:00", users: ['a']},
{start: "02-07-2023 00:00", end: "03-07-2023 00:00", users: ['f']},
{start: "03-07-2023 00:00", end: "04-07-2023 00:00", users: ['c']},
{start: "04-07-2023 00:00", end: "04-07-2023 01:00", users: ['a']},
{start: "04-07-2023 01:00", end: "05-07-2023 12:00", users: ['e']},
{start: "05-07-2023 12:00", end: "06-07-2023 00:00", users: ['b']}
]