我正在尝试创建一个包含数周,数天和数小时的日历对象,其中每天都有一个日期。我将开始日期设置为2017年1月2日。但是在完成循环后,日历中的所有日期都是2018年1月2日。
var calendar = {};
var date = new Date(2017,0,2);
calendar['weeks'] = [];
for (var w = 0; w < 52; w++) {
calendar['weeks'][w] = {};
calendar['weeks'][w]['number'] = w+1;
calendar['weeks'][w]['days'] = [];
for (var d = 0; d < 7; d++) {
calendar['weeks'][w]['days'][d] = {};
calendar['weeks'][w]['days'][d]['date'] = date;
calendar['weeks'][w]['days'][d]['hours'] = [];
calendar['weeks'][w]['days'][d]['number'] = d+1;
for (var h = 0; h < 24; h++) {
calendar['weeks'][w]['days'][d]['hours'][h] = {};
calendar['weeks'][w]['days'][d]['hours'][h]['number'] = h+1;
}
date.setDate(date.getDate()+1);
}
}
答案 0 :(得分:4)
您只有一个 date
个对象。当您在该循环中一遍又一遍地将其链接到calendar
对象时,每个引用都指向同一个对象。
您需要在每次迭代时创建新实例:
date = new Date(date);
date.setDate(date.getDate() + 1);
或者,在设置“date”属性时创建一个新实例:
calendar['weeks'][w]['days'][d]['date'] = new Date(date);
也可以写成:
calendar.weeks[w].days[d].date = new Date(date);