Что продолжает делать внутри вложенного цикла for? - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть следующий код:

for (var i in players) {
    for (var x in players[i].bullets) {
        for (var y in xpBoosts) {
            if (something === true) {
                // do something
                continue;
            }
        }
    }
}

Что будет делать оператор продолжения? Будет ли цикл цикла самым внутренним для цикла или самым внешним?

Можно ли каким-то образом заставить оператор продолжения перейти к следующему пункту?

Ответы [ 4 ]

0 голосов
/ 07 ноября 2018

По умолчанию continue и break применяются к самому внутреннему циклу. В вашем конкретном коде он продолжит этот цикл:

for (var y in xpBoosts) {

Однако это поведение можно настроить с помощью меток. Например:

outerLoop:
for (var i = 0; i < someVal; i++){
  middleLoop:
  for (var j = 0; j < someOtherVal; j++){
    innerLoop:
    for (var k = 0; k < yetAThirdVal; k++){
      continue;//skip to next iteration of innerLoop
      continue innerLoop;//skip to next iteration of innerLoop
      continue middleLoop;//skip to next iteration of middleLoop
      continue outerLoop;//skip to next iteration of outerLoop
    }
  }
}

Надеюсь, это поможет!

0 голосов
/ 07 ноября 2018

РЕДАКТИРОВАТЬ: Я оставлю свой ответ здесь, но я очень предпочитаю ответ ohlec .


continue переходит только к следующей итерации самого внутреннего цикла for.

У вас может быть переменная, которая инициализируется как false для каждого маркера. Затем вы можете пометить это как true, если продолжите внутренний цикл.

for (var x in players[i].bullets) {
  var skipThisBullet = false;

  for (var y in xpBoosts) {
    if (something === true) {
      // do something
      skipThisBullet = true;
      continue;
    }
  }

  if (skipThisBullet) continue;

}
0 голосов
/ 07 ноября 2018

continue завершает текущую итерацию цикла, в котором он находится. Чтобы завершить итерацию другого цикла, используйте его с метками:

for (var i in players) {
    bullets: for (var x in players[i].bullets) {
        for (var y in xpBoosts) {
            if (something === true) {
                // do something
                continue bullets;
            }
        }
    }
}
0 голосов
/ 07 ноября 2018

В вашем конкретном коде continue ничего не делает.

continue - это ключевое слово, которое выйдет из текущей итерации цикла и перейдет к следующей.

в качестве примера:

for (i = 1; i <= 10; i++) {
  if (i == 5) continue;
  console.log(i);
}

Вы заметите, что 5 не выводится на консоль. Когда условная проверка подтверждается, она продолжается на следующей итерации, не выполняя оставшуюся часть кода в блоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...