如何为循环编写Javascript代码,使其在满足第一个条件时中断?

如何为循环编写Javascript代码,使其在满足第一个条件时中断?,javascript,Javascript,我试图编写一个脚本来找到最大的公因数(最高公因数/HCF),但是循环是向下计数的,所以我想在它找到第一个公因数时立即中断(因为它是向下计数的,所以这也是HCF) 然而,我的代码最终打印出了所有的公因子,并没有在找到4时立即跳出循环,HCF为12和8 这是: function maxi(a, b) { for (var i = a; i >= 1; i--) { for (var j = b; j >= 1; j--) { if (a % i == 0) {

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

然而,我的代码最终打印出了所有的公因子,并没有在找到4时立即跳出循环,HCF为12和8

这是:

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


一种方法是使用“return”而不是“break”

函数最大值(a,b){
对于(变量i=a;i>=1;i--){
对于(var j=b;j>=1;j--){
如果(a%i==0){
如果(b%j==0&&i==j){
返回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);

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

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

可以使用指定要从中断开的特定循环

函数最大值(a,b){
外部:
对于(变量i=a;i>=1;i--){
内部:
对于(var j=b;j>=1;j--){
如果(a%i==0){
如果(b%j==0&&i==j){
控制台日志(i);
打破外部;
}
}
}
}
}

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

有两种同样优雅的方法可以达到同样的效果

备选案文1: 使用而不是:

在函数中调用return语句时,此 功能停止。如果指定,则会将给定值返回给 函数调用者。如果省略表达式,则返回undefined 相反


备选案文2: 结合使用:

带标签的语句可以与break或continue语句一起使用。 它是在语句前面加上一个标识符,您可以引用该标识符

[……]

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


使用return/return i而不是breakCan可以很好地工作,您不能只使用return i;而不是打破循环?那太棒了,非常感谢,真的很有帮助。你能告诉我回程有什么不同吗?为什么回程无效?谢谢你advance@MohamedHegazy您有三个嵌套for循环。您中断最内部的循环,但在下一次迭代中,外部循环跳回内部循环。中断将中断内部循环,因此外部循环仍将运行。return将使您的代码返回函数调用站点。谢谢您的回答,但是为什么return会使函数正常运行,而break不会?区别在于“break”语句只中断最内部的for循环,而让外部的for循环运行。而“return”则完全退出函数,将答案返回给调用者。
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) {
  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);
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);