[英]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.