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

09-19 04:53