首页 > 解决方案 > 如何停止包含嵌套循环和 if else 语句的整个 javascript 代码?

问题描述

我是 javascript 的初学者。我编写了我的第一个程序,它以特定格式写入日期,即“DOB=mm%2Fdd%2Fyyyy”并在控制台中提供输出。

var testdate = "DOB=06%2F07%2F2004"
var minyear = 2003;
for(var year = 2005; year>=minyear; year--){
    if (year % 4 == 0 && year % 100 !== 0 || year % 400 == 0){        
        var maxmonth = 12;
        for (var month = 1; month <= maxmonth; month++) {
            var fmonth = ("0" + month).slice(-2);
            if (fmonth == 01 || fmonth == 03 || fmonth == 05 || fmonth == 07 || fmonth == 08 || fmonth == 10 || fmonth == 12) {
                var maxdate = 31;
                for (var date = 1; date <= maxdate; date++) {
                    var fdate = ("0" + date).slice(-2);
                    var sentdate = "DOB=" + fmonth + "%2F"+ fdate + "%2F" + year
                    console.log(sentdate)
                }
            }
            else if (fmonth == 02) {
                var maxdate = 29;
                for (var date = 1; date <= maxdate; date++) {
                    var fdate = ("0" + date).slice(-2);
                    var sentdate = "DOB=" + fmonth + "%2F"+ fdate + "%2F" + year
                    console.log(sentdate)
                }
            }
            else {
                var maxdate = 30;
                for (var date = 1; date <= maxdate; date++) {
                    var fdate = ("0" + date).slice(-2);
                    var sentdate = "DOB=" + fmonth + "%2F"+ fdate + "%2F" + year
                    console.log(sentdate)
                }
            }
        }
    }
    else {
        var maxmonth = 12;
        for (var month = 1; month <= maxmonth; month++) {
            var fmonth = ("0" + month).slice(-2);
            if (fmonth == 01 || fmonth == 03 || fmonth == 05 || fmonth == 07 || fmonth == 08 || fmonth == 10 || fmonth == 12) {
                var maxdate = 31;
                for (var date = 1; date <= maxdate; date++) {
                    var fdate = ("0" + date).slice(-2);
                    var sentdate = "DOB=" + fmonth + "%2F"+ fdate + "%2F" + year
                    console.log(sentdate)
                }
            }
            else if (fmonth == 02) {
                var maxdate = 28;
                for (var date = 1; date <= maxdate; date++) {
                    var fdate = ("0" + date).slice(-2);
                    var sentdate = "DOB=" + fmonth + "%2F"+ fdate + "%2F" + year
                    console.log(sentdate)
                }
            }
            else {
                var maxdate = 30;
                for (var date = 1; date <= maxdate; date++) {
                    var fdate = ("0" + date).slice(-2);
                    var sentdate = "DOB=" + fmonth + "%2F"+ fdate + "%2F" + year
                    console.log(sentdate)
                }
            }
        }
    }    
}                       

我希望当senddate等于testdate时,该程序将在该点停止。意味着,此代码不应进一步执行。我找不到任何办法这样做。任何人,请帮助我实现这一目标。

标签: javascriptfor-loopif-statementbreak

解决方案


这里发生了三件事。

  1. 我删除了单独的闰年部分,只是相应地更改了 2 月的 # 天
  2. 我用一个单独的函数来测试testdate——为什么要一个单独的函数?b/c 否则我们将编写相同的逻辑 3 次
  3. 为了打破这个嵌套循环,我在开头应用了一个循环标签。 dateloop:然后当找到匹配项时,我们就爆发了:break dateloop;

var testdate = "DOB=06%2F07%2F2004"

function matchesTestDate(date) {
  return testdate == date;
}
var minyear = 2003;
dateloop: // this is the label for your loop
  for (var year = 2005; year >= minyear; year--) {
    var maxmonth = 12;
    for (var month = 1; month <= maxmonth; month++) {
      var fmonth = ("0" + month).slice(-2);
      if (fmonth == 01 || fmonth == 03 || fmonth == 05 || fmonth == 07 || fmonth == 08 || fmonth == 10 || fmonth == 12) {
        var maxdate = 31;
        for (var date = 1; date <= maxdate; date++) {
          var fdate = ("0" + date).slice(-2);
          var sentdate = "DOB=" + fmonth + "%2F" + fdate + "%2F" + year
          console.log(sentdate)
          if (matchesTestDate(sentdate)) break dateloop;
        }
      } else if (fmonth == 02) {
        var maxdate = (year % 4 == 0 && year % 100 !== 0 || year % 400 == 0) ? 29 : 28;
        for (var date = 1; date <= maxdate; date++) {
          var fdate = ("0" + date).slice(-2);
          var sentdate = "DOB=" + fmonth + "%2F" + fdate + "%2F" + year
          console.log(sentdate)
          if (matchesTestDate(sentdate)) break dateloop;
        }
      } else {
        var maxdate = 30;
        for (var date = 1; date <= maxdate; date++) {
          var fdate = ("0" + date).slice(-2);
          var sentdate = "DOB=" + fmonth + "%2F" + fdate + "%2F" + year
          console.log(sentdate)
          if (matchesTestDate(sentdate)) break dateloop;
        }
      }
    }
  }


推荐阅读