与继续一起使用时陷入无限循环

时间:2019-01-05 14:41:59

标签: javascript

我写了一个代码遍历数组,当我使用while和其中的continue语句时,我陷入了无限循环:

function loop(){
    var x = [1,2,3,4,5,6,7,8]
    var i = 0;
    while ( i < x.length){
         if (x[i] % 2 == 0){
               continue;
         }
         i++
    }
    console.log(x[i])
}
loop()

我尝试将i++添加到循环外,并在循环内得到相同的结果。

预期结果是1,3,5,....等等,实际结果是无限循环。

5 个答案:

答案 0 :(得分:3)

问题是i应当增加条件是否成立,否则它将继续无限期地反复测试相同的值。

function loop(){
    const x = [1,2,3,4,5,6,7,8]
    for(let i = 0; i < x.length; i++){
         if (x[i] % 2 == 0){
               continue;
         }
         console.log(x[i])
    }
}
loop()

现代JS:

function loop(){
    const x = [1,2,3,4,5,6,7,8]
    return x.filter(n=>n % 2 !== 0);
}
const res = loop();
console.log(res);

答案 1 :(得分:1)

continue立即进入循环的下一个迭代,跳过循环主体的其余部分。因此,它跳过了i++,并且下一次迭代测试了相同的x[i]。由于没有任何变化,因此条件再次成功,因此它会继续执行相同的操作。

您只想跳过console.log(x[i])语句,而不要跳过正文中的所有内容。

此外,您根本没有将console.log(x[i])放在循环中,因此即使循环正常工作,您也不会打印出奇数元素;循环完成后,它只会打印x[i],并且由于i会在数组之外,因此它将打印`undefined。

function loop() {
  var x = [1, 2, 3, 4, 5, 6, 7, 8]
  var i = 0;
  while (i < x.length) {
    if (x[i] % 2 != 0) {
      console.log(x[i]);
    }
    i++
  }
}
loop()

如果您确实要使用whilecontinue,则可以在测试前放置i++。但是,当您将1用作数组索引时,必须从i中减去function loop() { var x = [1, 2, 3, 4, 5, 6, 7, 8] var i = 0; while (i < x.length) { i++; if (x[i - 1] % 2 == 0) { continue; } console.log(x[i - 1]); } } loop()

for

您还可以使用while循环而不是i++,因为for()将位于function loop() { var x = [1, 2, 3, 4, 5, 6, 7, 8] for (var i = 0; i < x.length; i++) { if (x[i] % 2 == 0) { continue; } console.log(x[i]) } } loop()标头中,该标头每次都会执行。

#blog {margin: 0; padding: 0;}
#blog li {float: left; width: 48%; list-style: none;}
#blog li:nth-child(2n) {float: right;}
#blog li:nth-child(2n+1) {clear: both;}

#blog li img {display: block; width: 100%; height: calc(100% / 2.5);} /* 2.5 is width/height ratio */

答案 2 :(得分:0)

如果您的目标是在循环中打印出奇数,请尝试仅打印它们:

function loop() {
    var x = [1,2,3,4,5,6,7,8]
    var i = 0;
    while ( i < x.length){
         if (x[i] % 2 == 1){
               console.log(x[i]);
         }
         i++;
    }
    
}
loop()

现在正在发生的事情是您的循环没有增加i,因此当数字甚至是您continue就在i++之后并且永远都不会超过该数字时,导致无穷大环。这样,无论数字是奇数还是偶数i。

答案 3 :(得分:0)

之所以会这样,是因为您没有在条件中增加i

使用此:

function loop(){
    var x = [1,2,3,4,5,6,7,8]
    var i = 0;
    while ( i < x.length){
        if (x[i++] % 2 == 0){
           continue;
        }
        console.log(i);
    }
    console.log(x[i])
}

loop()

答案 4 :(得分:-2)

如果要遍历数组,请使用for循环