【发布时间】:2016-12-29 12:56:45
【问题描述】:
我已经查看了有关此问题的先前帖子,但无法获得普遍建议的解决方案来为我工作。 evtList 是“事件”类型的对象的全局数组。以前的帖子表明,在我的循环中创建一个本地对象(“newEvent”),定义它的元素,然后将本地对象推入全局数组应该可以工作。但是,我发现一旦我为 newEvent 对象中的元素声明了一个新值,全局数组中的所有对象甚至在推送操作之前都会更改为该组值。我错过了什么?
var i = 0;
var nextTime = new Date();
while (evtList[i].evtTime < dayEnd) {
i++;
var newEvent = new Event;
var milliSecs = (evtList[i-1].evtTime).getTime() + gaussian(arrStations[0].mean, arrStations[0].stdDev);
nextTime.setTime(milliSecs);
newEvent = ({value: 1, station: 0, evtTime: nextTime});
evtList.push(newEvent);
}
【问题讨论】:
-
您要添加到您正在循环的数组中?
-
为什么你认为对象是相同的?它们是不同的对象,但
evtTime对于所有对象都是相同的,因为它们都引用相同的日期 (nextTime)。除此之外,您推送的newEvent元素是一个普通的 JavaScript 对象,而不是Event类型的对象。 -
下一个时间值会在你推送之前改变,因为你正在更新所有 newEvent 对象都存在的相同引用......所以即使你正在添加一个新对象...... .对象的组成部分具有相同的值......这就是为什么您会看到所有对象都具有相同的值
-
我正在构建一组时间线事件(对象)。每个新事件在前一个事件之后以正态分布的间隔发生。时间线在达到或超过用户设置的 dayEnd Date 值时停止。,
标签: javascript arrays push