【发布时间】:2019-12-18 15:43:01
【问题描述】:
我试图每天 3 次通知用户他的药物,所以我创建了:
let timesPerDay = []
const today = moment();
//not working
for (let i = 0; i < 3; i++) {
timesPerDay.push(today.add(8 * i, "hour"));
}
//working normally
for (let i = 0; i < 3; i++) {
console.log(today.add(8 * i, "hour"));
}
console.log(timesPerDay)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
但是有一个奇怪的错误,当推送到数组时,它保存每次迭代的第一个日期而不是每次都增加 8 小时,这太奇怪了!
Array.push 是如何工作的?
JavaScript 创建数组的速度是否太快,所以第一个循环不工作但第二个循环工作?
代码笔: https://codepen.io/microsmsm-the-flexboxer/pen/BaypYVO
编辑:
答案不起作用后我正在使用的相同片段
【问题讨论】:
-
绝对不是“怪异”。它按预期工作,因为
.add()“通过增加时间来改变原始时刻。” -
@Andreas 但我在第一次迭代时加了 0 小时,在第二次迭代时加了 8 小时,在最后一次迭代时加了 16 小时,为什么数组会产生相同的值?
-
我希望所有日期实际上都相等,即最后一个突变的值。每次迭代都在改变同一个实例
-
但为什么第二个循环工作正常?
-
第二个循环似乎正常工作,因为它在每个间隔而不是在结束时输出。它仍然应该是 startdate +0 在第一 + 0 + 8 在第二和 + 0 + 8 + 16 在结束
标签: javascript arrays angular momentjs pass-by-rvalue-reference