У меня есть массив, основанный на графике Ганта. Массив содержит объекты со следующими свойствами
{
id: string;
startTime: Date;
durationEstimated: number;
isBreak: boolean;
}
и некоторыми значениями generi c. На основании этих значений мне нужно l oop через массив и сортировать / обновлять startTime на основе предыдущих значений. При этом мне также нужно учитывать "isBreak" (stati c value - startTime / durationEstimated никогда не меняется)
Например, скажем, у меня есть этот массив:
[
{id: '1', startTime: "2020-04-01T08:30:00", durationEstimated: 60, isBreak: false},
{id: '2', startTime: "2020-04-01T09:00:00", durationEstimated: 15, isBreak: true},
{id: '3', startTime: "2020-04-01T09:45:00", durationEstimated: 60, isBreak: false},
{id: '4', startTime: "2020-04-01T10:45:00", durationEstimated: 60, isBreak: false},
{id: '5', startTime: "2020-04-01T11:45:00", durationEstimated: 60, isBreak: false},
{id: '6', startTime: "2020-04-01T12:00:00", durationEstimated: 60, isBreak: true},
{id: '7', startTime: "2020-04-01T13:45:00", durationEstimated: 60, isBreak: false}
]
Первый элемент (id = '1') будет работать в течение 30 минут. Затем перерыв (id = '2') на 15 минут и затем sh вверх за последние 30 минут до запуска следующего элемента (id = '3') . (Новый элемент никогда не будет добавлен к позиции 0)
Скажем, мне нужно добавить еще один объект в это (время начала не имеет значения)
{id: '8', startTime: "2022-05-01T14:30:00", durationEstimated: 60, isBreak: false}
Я помещаю sh в массив в После этого массив будет выглядеть следующим образом:
[
{id: '1', startTime: "2020-04-01T09:30:00", durationEstimated: 60, isBreak: false},
{id: '8', startTime: "2022-05-01T14:30:00", durationEstimated: 60, isBreak: false}
{id: '2', startTime: "2020-04-01T09:00:00", durationEstimated: 15, isBreak: true},
{id: '3', startTime: "2020-04-01T09:45:00", durationEstimated: 60, isBreak: false},
{id: '4', startTime: "2020-04-01T10:45:00", durationEstimated: 60, isBreak: false},
{id: '5', startTime: "2020-04-01T11:45:00", durationEstimated: 60, isBreak: false},
{id: '6', startTime: "2020-04-01T12:00:00", durationEstimated: 60, isBreak: true},
{id: '7', startTime: "2020-04-01T13:45:00", durationEstimated: 60, isBreak: false}
]
Здесь я хочу начать сортировку и обновление startTime всех элементов после первого элемента. Таким образом, он должен перемещать предметы по размерам.
Ожидаемый результат:
[
{id: '1', startTime: "2020-04-01T08:30:00", durationEstimated: 60, isBreak: false},
{id: '2', startTime: "2020-04-01T09:00:00", durationEstimated: 15, isBreak: true},
{id: '8', startTime: "2020-04-01T09:45:00", durationEstimated: 60, isBreak: false},
{id: '3', startTime: "2020-04-01T10:45:00", durationEstimated: 60, isBreak: false},
{id: '4', startTime: "2020-04-01T11:45:00", durationEstimated: 60, isBreak: false},
{id: '6', startTime: "2020-04-01T12:00:00", durationEstimated: 60, isBreak: true},
{id: '5', startTime: "2020-04-01T13:45:00", durationEstimated: 60, isBreak: false},
{id: '7', startTime: "2020-04-01T14:45:00", durationEstimated: 60, isBreak: false}
]
Реальный массив имеет длину около 60-80 строк и содержит несколько разрывов + различные значения продолжительности. Оценочные значения.
Пробовал
Я всегда сталкиваюсь с проблемами, когда мне приходится перемещать элементы в массиве, чтобы учесть время перерыва.
Я думаю, что я oop через массив, проверяющий каждый элемент, сравнивающий его с предыдущим элементом ( startTime + duration ) и добавляющий новую дату к текущему элементу итерации startTime . И затем go через каждый предмет, делающий это. Проблема в том, что происходят перерывы, видя, что они статичны c и никогда не обновляются.
Это работает, если вы только добавляете новые элементы в последнюю позицию массива ( Потому что мне не нужно сортировать, можно проверить только предыдущее значение). Но в реальном приложении новые предметы будут добавляться в любую позицию.