我的初始化看起来像这样:
var date = moment(arrValue.start_date).add(5, 'hours');
var dummy = date.clone();
var date2 = dummy.add(arrValue.duration, 'hours');
我有一个看起来像这样的for循环:
for(var d = date.clone(); d.isBefore(date2); d.add(1, 'hours')) {
console.log(d);
console.log(d.hour());
unavailableDates.push(d);
}
在每次迭代中,d的console.log具有相同的值
_d:2018年3月5日星期一16:00:00 GMT-0500(EST)
这是^。console.log(date2)将包含的值。它迭代正确的次数,console.log(d.hour())显示正确的小时,但是对象d本身由于某种原因是不正确的,所以当我将它推送到unavailableDates时,每个索引总是包含值DATE2。
这是因为您在每次迭代时都在对数组进行变异并添加相同的对象。这意味着在迭代结束时,数组中的每个对象都将是同一个对象,并具有最终的突变。为避免这种情况,您可以在迭代中克隆对象,例如:
for(var d = date.clone(); d.isBefore(date2); d.add(1, 'hours')) {
console.log(d);
console.log(d.hour());
x = d.clone()
unavailableDates.push(x);
}