0

Есть функция:

function generator(gameBorad, boardSize, maxBombs) {
    let bombs = [];
    do {
        let x = getRandom();
        let y = getRandom();
        for (bomb in bombs) {
            if (!(bomb.x == x && bomb.y == y)) {
                bombs.push({
                    x: x,
                    y: y
                });
            }
        }
} while (bombs.length < maxBombs);
console.log(bombs)

}

При ее вызове браузер зависает. Если удалить этот код:

 for (bomb in bombs) {
            if (!(bomb.x == x && bomb.y == y)) {

то она работает, почему этот код вызывает зависание?

XXI
  • 13
  • В массиве 2 элемента, в for вы берете 1й элемент, добавляете 1 в конец массива, в условии for берете 2й элемен, но там уже их 3, добавляете, в массиве уже 4, вы берет 3й, добавляете, в массиве 5 элементов, и так далее... вот вам и зацикливание, т.к. вы никогда не дойдете до конца массива, т.к. с каждой итерацией его увеличиваете – SwaD Oct 29 '22 at 13:40

1 Answers1

0

Видимо getRandom даёт такой колоссальный разброс, что условие например никогда не срабатывает и в итоге while работает бесконечно. Понять это вы бы могли просто занявшись отладкой

  • getRandom у меня ограничен от 0 до 5 – XXI Oct 29 '22 at 12:02
  • Это вы так думаете.... Но это не важнл, т.к. абсолюнто вся суть написана в ответе. Можете включить отладчик и опсмотреть что происходит на каждой итерации, до условия или во время проеверки оного – Алексей Шиманский Oct 29 '22 at 12:07