Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript array.length为0,但数组中填充了40项_Javascript_Arrays - Fatal编程技术网

Javascript array.length为0,但数组中填充了40项

Javascript array.length为0,但数组中填充了40项,javascript,arrays,Javascript,Arrays,我的javascript代码的一个数组中有一个大问题: console.dir(particles[idx]); 返回 Array[0] 0: particle ... 39: particle length: 40 __proto__: Array[0] (index):191 但是 返回 length:0 知道为什么长度值是0吗? 在console.dir中,长度为40 我以为是在阵列创建中,但没有找到原因 下面是填充此数组的代码(在这种情况下,idx=1): 谢谢你的帮助 [编辑]

我的javascript代码的一个数组中有一个大问题:

console.dir(particles[idx]);
返回

Array[0]
0: particle
...
39: particle
length: 40
__proto__: Array[0]
 (index):191
但是

返回

length:0
知道为什么长度值是0吗? 在console.dir中,长度为40

我以为是在阵列创建中,但没有找到原因

下面是填充此数组的代码(在这种情况下,idx=1):

谢谢你的帮助

[编辑]

我有以下代码可以正确返回数组长度:

        (function emitter(i) {
            setTimeout(function () {
            particles.push(new particle());
                if (--i) emitter(i);
            }, 50);
        })(particle_count);

唯一的区别在于未使用索引的粒子数组。

粒子
是一个包含40个项目但粒子[idx]的数组。长度返回40个项目长度之一的长度。比如:

var particles = ['','','',''];

particles.length
为4,但
particles[0]。length
为0,因为
particles[0]='

是否确定在异步填充数组之前不记录长度?是否要记录
particles
的长度?根据以上信息,
粒子
由40个
粒子
元素组成。执行
粒子[idx].length时,您将获得其中一个
粒子
元素的长度。尝试
粒子。长度
。请显示整个代码。显然存在一些计时问题,当您仅显示不相交的代码段时,这一点并不明显。最后一个代码段显示所有元素都被推送到
particles[idx]
so
particles[idx]。长度
似乎是正确的(除非
idx
的值在此过程中发生变化)。由于您正在
设置超时时间
中推送新的
粒子
s,因此不会立即看到它们被添加。所以对于
console.log(“长度:“+particles[idx].length”)
要工作,需要在最后一次
setTimeout
调用后调用它。如果您早些时候调用它,当然数组仍然为空/未完全填充。请阅读问题的注释。元素被推送到
粒子[idx]
,而不是
粒子
        (function emitter(i) {
            setTimeout(function () {
            particles.push(new particle());
                if (--i) emitter(i);
            }, 50);
        })(particle_count);
var particles = ['','','',''];