(rails)时刻对象显示为变异,但.hours()是正确的

问题描述 投票:0回答:1

我的初始化看起来像这样:

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。

javascript ruby-on-rails momentjs
1个回答
1
投票

这是因为您在每次迭代时都在对数组进行变异并添加相同的对象。这意味着在迭代结束时,数组中的每个对象都将是同一个对象,并具有最终的突变。为避免这种情况,您可以在迭代中克隆对象,例如:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.