javascript - 如何停止包含嵌套循环和 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时,该程序将在该点停止。意味着,此代码不应进一步执行。我找不到任何办法这样做。任何人,请帮助我实现这一目标。
解决方案
这里发生了三件事。
- 我删除了单独的闰年部分,只是相应地更改了 2 月的 # 天
- 我用一个单独的函数来测试
testdate
——为什么要一个单独的函数?b/c 否则我们将编写相同的逻辑 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;
}
}
}
}
推荐阅读
- javascript - 显示 React 门户时背景模糊
- c# - C#避免滚动通过串口接收的数据
- python - 使用 ImageIO 和 Python 将 EXR 转换为 JPEG
- java - 将程序挂起到文件,然后从该文件重新加载
- javascript - 无法将变量与从 localStorage [Vuejs] 检索到的另一个变量相等
- html - 为什么当我使用诸如 rotateZ() 之类的 CSS 变换时,我的立方体会“跳跃”?
- r - 在 ggplot 中可视化一个因素与多个其他因素之间的关系
- javascript - 在javascript中将数组分成3组
- visual-studio - 在断点处执行带有副作用的 C# 代码
- r - 根据不同列中的值将一列中的值替换为 NA