javascript - 带 for 循环的日期数组

标签 javascript arrays date for-loop typescript

我对这段代码有疑问。如果我在 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/

相关文章:

javascript - 如何从 Android 应用程序中托管的 webView 调用 window.openDatabase?

javascript - 如何在 UIWebView 中更改用户的选择范围?

javascript - 在 Node Js 上运行服务器时未定义套接字

java - 如何打印存储在数组中的对象的实例

javascript - Array.prototype.every 在测试数组中的空值有长度时返回 true?

javascript - 高级日期范围计算,不包括周末和节假日

javascript - 令人惊讶的简单操作结果

比较 C/C++ 中的指针(字符数组)

javascript - 生成特定 JavaScript 日期和标识符(月、日、年、周)的开始和结束范围?

MySQL 用于平均缺失日期