Javascript 推送到对象后数组未定义

Javascript 推送到对象后数组未定义,javascript,Javascript,我将一个对象推入一个对象数组。将对象推送到数组后,对象(数组)的一个属性显示为未定义。如果您查看下面我的代码,它会说,“为什么这会显示在控制台中?”-这没有意义,因为如果数组未定义,那么它应该在前两次检查中都未定义(它会说“这不会显示在控制台中”)。这让我快发疯了。求救信号。请帮忙 var pathCopy = unit.path; // THIS IS AN ARRAY AND IT IS NOT EMPY var directionCopy =

我将一个对象推入一个对象数组。将对象推送到数组后,对象(数组)的一个属性显示为未定义。如果您查看下面我的代码,它会说,“为什么这会显示在控制台中?”-这没有意义,因为如果数组未定义,那么它应该在前两次检查中都未定义(它会说“这不会显示在控制台中”)。这让我快发疯了。求救信号。请帮忙

            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??');
                }

            }
var pathCopy=unit.path;//这是一个数组,不是EMPY
var directionCopy=unit.direction;
if(pathCopy.length<1){
log('这不在控制台中显示');
}
变量对象={
“类型”:“移动”,
“时间”:游戏时间,
“name”:unit.name,
“向量”:路径副本,
“方向”:directionCopy
};
currentGameEvents.push(对象);
if(object.vector.length<1){
log('这不在控制台中显示');
}
对于(var i=0;i
我不确定如何或为什么,但如果我插入未定义的变量(即,我用
[34534623,52]
或数组文本的东西替换
unit.path
),您的示例会起作用

唯一的区别是,您实际上将引用分配给该数组,而不是声明一个新数组

要解决此问题,请尝试以下操作

var pathCopy = unit.path.slice(); // pathCopy is a completely NEW array that contains the same values as unit.path
每当您要复制数组时;在末尾添加
.slice()

同样,这是从您的代码和我尝试的代码之间的唯一差异推断出来的,这可能就是您的代码不起作用的原因



另一个假设是
currentGameEvents
是一个
数组
。否则,你的代码根本不起作用。我之所以提到这一点,是因为标题中指出,您试图将
推送到一个对象,这是不可能的。

您在
currentGameEvents
中是否有其他对象的
向量数组为空?您可能应该注销循环中的一些其他详细信息,例如
console.log(i,currentGameEvents[i].name)
如果要复制数组(
pathCopy
directionCopy
),请在末尾使用
.slice()
)。否则引用将被保留。我创建了一个基本示例,但它没有实现您所声称的功能。请发表一篇文章,以便我们重现这个问题。OP的代码中没有任何内容表明引用的数组正在第二台和第三台控制台之间更改logs@Phil谁知道呢?他也没有提到缺失的值是什么,所以可能他的部分代码也缺失了。你不需要假设它是一个数组,它就在OP的问题中~“我正在将一个对象推到一个对象数组中”它是一个数组,但使用slice()确实解决了这个问题。奇怪的是,slice()是我尝试的第一件事,但没有成功。。。我想我可能在第一次测试浏览器缓存时忘记了清除它。但是slice()是必需的,因为数组在放入对象后正在更改。所以我需要一个新数组,而不是一个引用。谢谢
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