我正在将一个对象推入一个对象数组中。在将对象推送到数组之后,对象的一个属性(即数组)显示为未定义。如果你看下面我的代码,它会说:“为什么这个在控制台里显示?” - 它没有意义,因为如果数组未定义,它应该在前两个检查中都未定义(它表示“这不是在控制台中显示。”)。这真让我抓狂。 SOS。请帮忙。
var pathCopy = unit.path; // THIS IS AN ARRAY AND IT IS NOT EMPY
var directionCopy = unit.direction;
if (pathCopy.length < 1) {
console.log('THIS IS NOT SHOWING IN CONSOLE');
}
var object = {
'type': 'move',
'time': gameTime,
'name': unit.name,
'vector': pathCopy,
'direction': directionCopy
};
currentGameEvents.push(object);
if (object.vector.length < 1) {
console.log('THIS IS NOT SHOWING IN CONSOLE');
}
for (var i = 0; i < currentGameEvents.length; i++) {
if (currentGameEvents[i].vector.length < 1) {
console.log('WHY IS THIS SHOWING IN CONSOLE??');
}
}
答案 0 :(得分:1)
我不确定如何或为什么,但是你的例子有效,如果我插入未定义的变量(即我将unit.path
替换为[345,34623,52]
或者是一个数组文字的东西。)
唯一的区别是,您实际上将引用分配给该数组,而不是声明 new 数组。
var pathCopy = unit.path; // pathCopy and unit.path are the SAME array
var pathCopy = [345,346,345]; // pathCopy is a completely NEW array
要解决此问题,请尝试
之类的内容var pathCopy = unit.path.slice(); // pathCopy is a completely NEW array that contains the same values as unit.path
每当您想要复制 数组时;最后添加.slice()
!
同样,这是从您的代码与我尝试的内容之间的唯一区别推断出来的,这可能是 原因,为什么您的代码不起作用。
另一个假设是currentGameEvents
是Array
。您的代码根本不起作用,否则。我之所以提到这一点,是因为标题声明你试图push
一个对象,这是不可能的。