I have an array like this:
let arr = [
{
title: 'Some title',
start: '09:30:59',
end: '09:33:59',
},
{
title: 'Some title',
start: '09:33:59',
end: '09:35:59',
},
{
title: 'Some title',
start: '09:35:59',
end: '09:40:59',
},
{
title: 'Some title',
start: '09:30:59',
end: '09:45:59',
}
...
];
And I want to get array grouped by some step for example 10:
let result = [
{
start: '09:30:59',
end: '09:40:59',
arr: [
{
title: 'Some title',
start: '09:30:59',
end: '09:33:59',
},
{
title: 'Some title',
start: '09:33:59',
end: '09:35:59',
},
],
},
{
start: '09:40:59',
end: '09:50:59',
arr: [
{
title: 'Some title',
start: '09:35:59',
end: '09:40:59',
},
{
title: 'Some title',
start: '09:30:59',
end: '09:45:59',
}
],
},
...
];
I tried do it:
let step = 10;
let diffMinutes = dayjs(arr[arr.length - 1].end).diff(arr[0].start, 'm') / step;
let newArr = [];
let result = [];
for (let t = 0; t < diffMinutes; t++) {
newArr = [];
for (let i = 0; i < arr.length; i++) {
if (dayjs(arr[i].start).isBetween(arr[0].start, dayjs(arr[0].start).add(step, 'm').format('YYYY-MM-DD HH:mm'))) {
newArr.push(state.events[i]);
}
}
result.push(
{
...
arr: newArr
}
)
}
I added condition with dayjs
that check if event start time enters a certain period of time.
I think it can be made easier than I did.
Result shout be array grouped by time with stem 10.
Sopouse that in else statment I should use last item of last array result.
But it work only for first iteration, how to do that in next I dot know.
Help me please.
Resolved problem example
let step = 5;
let diffMinutes = Math.round(
dayjs(arr[arr.length - 1].end).diff(arr[0].start, "m") / step
);
let result = [];
let newArr = [];
for (var i = 0; i <= diffMinutes; i++) {
newArr = [];
if (i === 0) {
for (let j = 0; j < arr.length; j++) {
if (
moment(arr[j].start).isSame(arr[0].start) ||
moment(arr[j].start).isSame(
dayjs(arr[0].start).add(step, "m").format("YYYY-MM-DD HH:mm:ss")
) ||
moment(arr[j].start).isBetween(
arr[0].start,
dayjs(arr[0].start).add(step, "m").format("YYYY-MM-DD HH:mm:ss")
)
) {
newArr.push(arr[j]);
}
}
} else {
let lastResult = result[result.length - 1];
let lastEllArr = lastResult[lastResult.length - 1];
console.log("i" + i, lastEllArr.start);
for (let j = 0; j < arr.length; j++) {
if (
moment(arr[j].start).isSame(
dayjs(lastEllArr.end).add(step, "m").format("YYYY-MM-DD HH:mm:ss")
) ||
moment(arr[j].start).isBetween(
lastEllArr.end,
dayjs(lastEllArr.end).add(step, "m").format("YYYY-MM-DD HH:mm:ss")
)
) {
newArr.push(arr[j]);
}
}
}
if (newArr.length !== 0) {
result.push(newArr);
}
}
If anyone suggests improving the code I would appreciate it