如何有效地将数组中的每个值彼此比较?

时间:2018-11-21 12:36:28

标签: javascript arrays sorting

我有一个名为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次,因此我需要最小化此过程的执行时间。

0 个答案:

没有答案