我的代码有问题。如果我在for循环中打印daysArray项(console.log(daysArray [i]);)它返回正确的日期,但是在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;
}
答案 0 :(得分:2)
问题是你总是使用相同的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
这会创建一个template<typename ...U>
void foo(const char *format, U... bars);
的新实例,它是前一个实例的“克隆”。
答案 1 :(得分:0)
您的问题很容易解决。您只是在数组的每个位置复制相同的项目。这意味着您将覆盖在for循环的每个步骤中设置的值。
只需为数组的每个位置创建一个新对象,就不会再出现错误了。像这样的东西
for (var i =0; i < 43; i++) {
var nDay = new Date();
nDay.setDate(firstDay.getDate() + i + 1);
daysArray[i] = nDay;
console.log(daysArray[i]);
}