Javascript array.length为0,但数组中填充了40项
我的javascript代码的一个数组中有一个大问题: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): 谢谢你的帮助 [编辑]
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]
soparticles[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 = ['','','',''];