在嵌套的for循环中继续做什么?

时间:2018-11-06 21:22:13

标签: javascript for-loop

我有以下代码:

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

continue语句将做什么?它会循环最里面的for循环还是最外面的?

有什么办法可以使continue语句循环到下一个项目符号?

4 个答案:

答案 0 :(得分:7)

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;
            }
        }
    }
}

答案 1 :(得分:2)

在您的特定代码中,continue不会执行任何操作。

continue是一个关键字,它将退出循环的当前迭代并继续进行下一个迭代。

例如:

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

您会注意到5未打印到控制台。当条件检查被证明是正确的时,它将继续进行下一次迭代,而无需执行该块中的其余代码。

答案 2 :(得分:2)

默认情况下,continuebreak适用于最内层的循环。在您的特定代码中,它将继续此循环:

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
    }
  }
}

希望这会有所帮助!

答案 3 :(得分:1)

编辑:我将答案留在这里,但我更喜欢ohlec's answer


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;

}