[英]Javascript: Restart loop once at the end of an array
我最近遇到了这个问题,在任何地方都找不到很好的答案(因此,这个问题)。
我想在结束时重新启动循环,但只循环有限的次数。
在这种特殊情况下,我在一周中有几天的数组,我想使用Date.getDay()
显示从今天的星期几开始的未来7天中的日子的名称,它返回一个从0(星期日)开始的值到6(星期六)。 我可以创建接下来7天名称的数组,但由于当前循环而我一直跳过一个名称。 这是我到目前为止所得到的。
我的预期输出是:
['friday', 'saturday', 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday']
const dayNames = [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
];
const rawDate = new Date();
let dayNum = rawDate.getDay();
const week = [];
for (let i = 0; i < 6; i++) {
if (dayNum + 1 === 7) {
dayNum = 0;
for (j = 0; j < todayNum; j++) {
week.push(dayNames[dayNum])
dayNum++
}
week.push(dayNames[dayNum]);
dayNum++
} else {
week.push(dayNames[dayNum + 1]);
dayNum++;
}
}
console.log(week);
我确实看到我的“ for”中的“ if”是一个人跳过的原因,但是我似乎无法解决该问题。 谢谢你们
您可以将余数运算符%
用于正确的索引。
const dayNames = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; const rawDate = new Date(); let dayNum = rawDate.getDay(); const week = []; for (let i = 0; i < 6; i++) { week.push(dayNames[(dayNum + i) % dayNames.length]); } console.log(week);
您不需要重新启动循环,只需使用模数运算符即可包装数组索引。
并且您需要固定dayNames
的顺序,使其与getDay()
返回的内容相对应。 整个循环需要运行7次,而不仅仅是6次。
const dayNames = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]; const rawDate = new Date(); const dayNum = rawDate.getDay(); const week = []; for (let i = dayNum; i < dayNum + 7; i++) { week.push(dayNames[i % 7]); } console.log(week);
尝试使用%
运算符,仅执行一个循环:
const dayNames = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]; const rawDate = new Date(); let dayNum = rawDate.getDay(); const week = []; for (let i = 0; i < 7; i++) { week.push(dayNames[dayNum++ % 7]); } console.log(week);
另外,根据Date.prototype.getDate ,一周的第零天是星期日。
如果要[明天明天+ 1,...,明天+ 6]:
for (let i = 1; i <= 7; i++) {
week.push(dayNames[(dayNum + i) % 7]);
}
您需要i < 7
才能获得接下来7天的全部信息,然后使用模数运算符%
返回除法的余数,并且一个for循环将为您提供所需的结果。
const dayNames = [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
];
const rawDate = new Date();
let dayNum = rawDate.getDay();
const week = [];
for (let i = 0; i < 7; i++) {
week.push(dayNames[(dayNum + i) % dayNames.length]);
}
console.log(week);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.