推送到对象后数组未定义

时间:2015-07-23 02:58:02

标签: javascript

我正在将一个对象推入一个对象数组中。在将对象推送到数组之后,对象的一个​​属性(即数组)显示为未定义。如果你看下面我的代码,它会说:“为什么这个在控制台里显示?” - 它没有意义,因为如果数组未定义,它应该在前两个检查中都未定义(它表示“这不是在控制台中显示。”)。这真让我抓狂。 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??');
                }

            }

1 个答案:

答案 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()

同样,这是从您的代码与我尝试的内容之间的唯一区别推断出来的,这可能是 原因,为什么您的代码不起作用。

另一个假设是currentGameEventsArray。您的代码根本不起作用,否则。我之所以提到这一点,是因为标题声明你试图push 一个对象,这是不可能的。