我正在嘗試根據周數創建一系列日期。
有四個星期,每個星期有 5 天,每周是一個包含周數和 5 天陣列的物件 - 天是包含日期和日期的物件。
weeks[0].days[0].day例如,星期一會回傳。
我使用 LuxonJS 使用函式根據星期數和星期幾生成日期generateDate(weekNr, dayNr)。
為了填寫date作業日專案中的值,我嘗試了以下方法:
for(x = 0; x <= weeks.length; x ){
for(y = 0; y <= weeks[x].days.length; y ){
weeks[x].days[y]['date'] = generateDate(weeks[x].weekNr, y)
}
}
但是,由于某種原因,現在每周的日子都充滿了上周的日期,因此weeks[0].days[4].date將回傳與weeks[3].days[4].date. 換句話說 - 除了周數,4 周變得相同。
如果我在 for 回圈中記錄日期,它們都會正確顯示,因此似乎每次第一個 for 回圈重復時它們都會被替換。有誰知道我做錯了什么?
uj5u.com熱心網友回復:
此行為可能與您構建原始weeks陣列的方式有關。看起來您為 中的所有四個條目分配了相同weeks的物件,而不是為每個條目創建一個新物件。
然后,當您運行該嵌套回圈時,您將為外回圈的每次迭代更改相同的物件。因此,請確保每次將物件分配(或推送)到weeks陣列時都創建一個新物件。
作為旁注,這是我在 vanilla JavaScript 中的操作方式:
function getWeekDays(year, weekNr) {
let dt = new Date(year, 0, 4); // 4 January is always in week #1
// Get Sunday before the start of the week
dt.setDate(dt.getDate() - (dt.getDay() || 7) - 7 weekNr * 7);
return {
weekNr,
days: Array.from({length: 5}, () => {
dt.setDate(dt.getDate() 1); // Increment date
return {
day: dt.toLocaleDateString("en", { weekday: 'long'}),
date: dt.toLocaleDateString("en-SE")
};
})
};
}
function getMonthDays(year, firstWeek, numWeeks) {
return Array.from({length: numWeeks}, () => getWeekDays(year, firstWeek ));
}
// Example creation of the weeks array
let weeks = getMonthDays(2022, 9, 4);
console.log(weeks);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/447077.html
標籤:javascript 数组 for循环 目的
