У меня есть набор событий для календаря. Это будет помещено в сетку.
Я пытаюсь подсчитать наибольшее количество событий, которые сталкиваются одновременно. Каждое событие имеет время start
и end
.
То, что я до сих пор делал, - это подсчитываю количество совпадений, но это не определяет максимальное количество столкновений.
const events = [{
id: 0,
start: 6,
end: 9,
title: "Hello"
},
{
id: 1,
start: 6,
end: 9,
title: "Hello"
},
{
id: 2,
start: 7,
end: 8,
title: "Hello"
},
{
id: 3,
start: 10,
end: 15,
title: "Hello"
},
{
id: 4,
start: 20,
end: 25,
title: "Hello"
},
{
id: 5,
start: 21,
end: 23,
title: "Hello"
},
]
// Check how many events are colliding at same time, to make more columns
let items = []
events.map(event => {
const matches = events.filter(o => {
//console.log(o.start, "is smaller or same", event.start, o.start <= event.end)
return o.start <= event.end && o.end >= event.start && event.id !== o.id
})
items.push({
...event,
matches
})
})
const collitions = items.sort((a, b) => {
if (a.matches < b.matches) return 1
if (a.matches > b.matches) return -1
return 0
})[0].matches.length + 1
console.log('There is', collitions, 'collitions')
Вот таблица, в которой в примере используются данные о событиях. Он выводит три, что правильно.
Вот таблица, когда происходит событие, которое является целым днем. Он выводит 6 встречных событий, но это неправильно. Это 4 встречных события подряд.