我如何编写一个 Javascript for 循环,以便在满足第一个条件时中断

how can I code a Javascript for loop so that it breaks when the first condition is met?

本文关键字:满足 第一个 中断 条件 循环 for 何编写 Javascript 一个      更新时间:2023-09-26

我试图编写一个脚本来查找最大公因数(最高公因数/HCF),但是循环正在向下倒计时,所以我想在找到第一个公因数后立即中断(因为它向下倒计时,所以这也是 HCF)。

但是,我的代码结果打印了所有公共因素,并且在找到 4 时并没有立即脱离循环,对于 12 和 8 的 HCF。

在这里:

function maxi(a, b) {
  for (var i = a; i >= 1; i--) {
    for (var j = b; j >= 1; j--) {
      if (a % i == 0) {
        if (b % j == 0 && i == j) {
          console.log(i);
          break;
        }
      }
    }
  }
}
maxi(12, 8);

我猜你的逻辑是正确的。

只是改变

 if (b % j == 0 && i == j){
                    console.log(i);
                    break;
            }

   if (b % j == 0 && i == j){
                        console.log(i);
                        return;
                }

一种方法是使用"return"而不是"break"。

function maxi(a,b){
    for (var i=a; i>=1; i--){
        for (var j=b; j>=1; j--){
            if (a % i == 0){
                if (b % j == 0 && i == j){
                    return i;
                }
            } 
        }
    }
}
console.log(maxi(12,8));

像这样标记你的循环:

function maxi(a,b) { 
loop1:
    for (var i = a; i >= 1; i--){
loop2:
        for (var j = b; j >= 1; j--){
            if (a % i == 0){
                if (b % j == 0 && i == j){
                    console.log(i);
                    break loop2; // Breaks out of all loops.
                }
            } 
        }
    }
}
maxi(12,8);

人们忘记了这些存在,但它们是语言中完全有效的一部分。

你只需要测试是否达到了所需的输出,并在你的外部for循环中放置第二个断点,就像这样。

function maxi(a,b){
    var iAmFinished = false;
    for (var i=a; i>=1; i--){
        for (var j=b; j>=1; j--){
            if (a % i == 0){
                if (b % j == 0 && i == j){
                    console.log(i);
                    iAmFinished = true;
                    break;
            }
            }
        }
        if (iAmFinished) {
            break;
        }
    }
}
maxi(12,8);

当您中断时,除非您另有指定,否则您将从最近的循环中断。

可以使用标签指定要中断的特定循环。

function maxi(a, b) {
  outer:
  for (var i = a; i >= 1; i--) {
    inner:
    for (var j = b; j >= 1; j--) {
      if (a % i == 0) {
        if (b % j == 0 && i == j) {
          console.log(i);
          break outer;
        }
      }
    }
  }
}
maxi(12, 8);

有两种同样优雅的方法可以实现相同的效果。

选项 1 :

使用return而不是break

function maxi(a, b) {
  for (var i = a; i >= 1; i--) {
    for (var j = b; j >= 1; j--) {
      if (a % i == 0) {
        if (b % j == 0 && i == j) {
          console.log(i);
          return;
        }
      }
    }
  }
}
maxi(12, 8);

当在函数中调用 return 语句时,执行此语句 函数已停止。如果指定,则给定值将返回到 函数调用方。如果省略表达式,则返回未定义 相反。


选项 2 :

breaklabel 结合使用:

function maxi(a, b) {
  outerloop:
  for (var i = a; i >= 1; i--) {
    for (var j = b; j >= 1; j--) {
      if (a % i == 0) {
        if (b % j == 0 && i == j) {
          console.log(i););
          break outerloop;
        }
      }
    }
  }
}
maxi(12, 8);

标记的语句可以与中断或继续语句一起使用。 它是在语句前面加上您可以引用的标识符。

[...]

可以使用标签来标识循环,然后使用中断或 继续语句,指示程序是否应中断 循环或继续执行。