Зависания при удалении из списка map

Рейтинг: 1Ответов: 1Опубликовано: 06.02.2023

Есть список на 2 миллиона записей и функция, каждый раз обрабатывающая и удаляющая 100 тыс. записей (map.delete). Список глобальный. Первые проходы обрабатываются быстро, записи удаляются, список уменьшается. Но чем дальше, тем дольше выполняется операция. Хотя вроде бы должно быть наоборот, список становится меньше. Если бы все тормозило сразу, то было бы понятно, что ресурсов не хватает. Но здесь программа несколько десятков раз выполняется быстро, и ближе к концу списка начинает висеть. В чем может быть проблема, и как с этим можно бороться? Среда браузера.

for (let i=1;i<100000;i++){
    const arr = all_tikets.entries()
    let idx = arr.next().value    
    // код    
    if (idx[1]>0){
        // код
    }
    else {
        // код
    }
    all_tikets.delete(idx[0])
    delete idx  // добавил, но проблему это не решило
} 

Ответы

▲ -1

Ну в общем сдвинул for на одну строчку вниз - все стало летать. Для этой задачи нет необходимости на каждом проходе делать entries(). Изначально функция была для одного прохода, без for и вызывалась много раз, for я добавил сюда для наглядности. Теперь переделал для N записей. Получается тормоза создавал all_tikets.entries() Всем спасибо!