Почему неправильно работает for
Не понимаю, почему в итоге получается 28, если должно получится 30 записей в массиве days. Эта глупая ошибка, которая у меня никогда не возникала нигде. В чем проблема?
let days = [];
let date = new Date();
for (let i = date.getDay(); i < new Date(date.getFullYear(), date.getMonth(), 0).getDate(); i++) {
days.push({
day: i,
schedule: false
});
}
for (let i = 0; i < 30 - days.length; i++) {
days.push({
day: i + 1,
schedule: false
});
}
Ответы (2 шт):
Автор решения: Grundy
→ Ссылка
На каждой итерации меняется длина массива days. Из-за этого вместо ожидаемых 5 итераций происходит 3.
Чтобы изменение массива не влияло, нужно вычислить количество итераций заранее:
let days = [];
let date = new Date();
for (let i = date.getDay(); i < new Date(date.getFullYear(), date.getMonth(), 0).getDate(); i++) {
days.push({
day: i,
schedule: false
});
}
var cnt = 30 - days.length;
for (let i = 0; i < cnt; i++) {
days.push({
day: i + 1,
schedule: false
});
}
console.log(days.length);