我对此代码有疑问。如果我在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
的新实例,该实例是上一个实例的“克隆”。