首页 > 解决方案 > Push() 覆盖数组中的现有对象

问题描述

所以在我的 js 函数中,我得到了一个数组,我想在每个 for 循环之后添加一个 dayObject。但最终会发生的情况是该数组由相同的 dayObject 组成。push() 方法似乎覆盖了每个条目。我能做些什么?

initModel: function (month, year) {
            var days = [];
            var mlength = new Date(year, month, 0).getDate();
            var dayObject = {
                date: null,
                enteredhours: "",
                timefrom: "",
                timeto: "",
                comment: ""
            };

            for (var i = 1; i < mlength; i++) {
                var day = new Date();
                day.setFullYear(year, month, i);
                dayObject.date = day;
                days.push(dayObject);

            }

            return days;

        }

标签: javascript

解决方案


您可以获取对象的副本以进行推送。这避免了相同的对象引用。

days.push({ ...dayObject });

或者映射一个新数组。

initModel: function (month, year) {
    const getDate = day => {
        const date = new Date();
        date.setFullYear(year, month, day);
        return date;
    };
    return Array.from(
        { length: new Date(year, month, 0).getDate() },
        (_, i) => ({
            date: getDate(i + 1),
            enteredhours: "",
            timefrom: "",
            timeto: "",
            comment: ""
        })
    );
}

推荐阅读