我对这段代码有疑问。如果我在 for 循环 (console.log(daysArray[i]);) 中打印 daysArray 项目,它会返回正确的日期,但在 for 循环之后返回所有 daysArray 项目的最后日期。 请有人能帮助我。
public getFullMonth(date: Date): Array<Date> {
var firstDay = this.getSunday(date);
var daysArray: Array<Date> = Array<Date>();
for (var i = 0; i < 43; i++) {
firstDay.setDate(firstDay.getDate() + 1);
daysArray[i] = firstDay;
console.log(daysArray[i]);
}
console.log(daysArray.length);
console.log(daysArray[0]);
console.log(daysArray[30]);
return daysArray;
}
最佳答案
问题是您始终使用同一个 Date
实例,而从不创建新的实例,因此 daysArray
中的所有项目都是同一个实例。
因此,当您这样做时:
firstDay.setDate(firstDay.getDate() + 1);
然后您实际上更改了所有项目的值。
您应该为每个项目创建一个新实例:
public getFullMonth(date: Date): Array<Date> {
var firstDay = this.getSunday(date);
var daysArray: Array<Date> = Array<Date>();
for (var i = 0; i < 43; i++) {
firstDay = new Date(firstDay.getTime());
firstDay.setDate(firstDay.getDate() + 1);
daysArray[i] = firstDay;
console.log(daysArray[i]);
}
console.log(daysArray.length);
console.log(daysArray[0]);
console.log(daysArray[30]);
return daysArray;
}
请注意,现在每次迭代都会:
firstDay = new Date(firstDay.getTime());
这会创建一个 Date
的新实例,它是前一个实例的“克隆”。
关于javascript - 带 for 循环的日期数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39406394/