我有一个名为entriesFinal
的数组,其中包含具有开始时间,结束时间和持续时间的数组。>
我想将这些条目推送到名为ganttData
的空数组中,并添加几个额外的字段。
entriesFinal
中的某些条目重叠,而我不希望ganttData
中的条目重叠。
下面是我当前的实现,该实现功能完美,但是执行时间太长。
forEachAsync
是一种自定义方法,在功能上与常规forEach
等效,但是异步工作。
let invalidEntries = []
await forEachAsync(entriesFinal, async entry1 => {
await forEachAsync(entriesFinal, async entry2 => {
if(entry1 != entry2){
let invalidStart = entry2.startTime.isBetween(entry1.startTime, entry1.endTime)
let invalidEnd= entry2.endTime.isBetween(entry1.startTime, entry1.endTime)
if(invalidStart || invalidEnd){
invalidEntries.push(entry2)
}
}
})
})
await forEachAsync(entriesFinal, async entry => {
if(!invalidEntries.includes(entry)){
ganttData.push({
name: channel.name,
label: label,
startTime: entry.startTime.format("DD/MM/YYYY HH:mm:ss"),
endTime: entry.endTime.format("DD/MM/YYYY HH:mm:ss"),
duration: entry.duration
})
}
})
是否有一种更有效的方法来排除重叠条目?这整个序列位于一个更宽的循环中,该循环运行约1500次,因此我需要最小化此过程的执行时间。