适当使用push的数组长度问题

时间:2013-04-30 10:01:06

标签: javascript arrays

我知道关于关联数组及其长度问题的常见问题,这个标题听起来非常熟悉。但是我还没有在Stack Overflow上找到解决我问题的方法。

问题是,.length总是输出0而不是想要的数量,在这个测试用例中将是12.当我通过console.log输出时,我得到12个条目,我可以看到具有正确值的length属性。我附上了我的萤火虫输出:

images: Array[12] 
    0: "img1.jpg"
    1: "img2.jpg"
    2: "img3.jpg"
    3: "img4.jpg"
    4: "img5.jpg"
    5: "img6.jpg"
    6: "img7.jpg"
    7: "img8.jpg"
    8: "img9.jpg"
    9: "img10.jpg"
    10: "img11.jpg"
    11: "img12.jpg"
    length: 12
    __proto__: Array[0]

以下代码段填充数组:

this.images.push(el.toDataURL());

当我现在呼叫console.log(this,this.images,(this.images).length);时,它始终为0而不是12。

任何帮助都将不胜感激。

小提琴上的剧本。 (在控制台上输出)

http://jsfiddle.net/EL2xR/

2 个答案:

答案 0 :(得分:2)

当您说 this.img.onload 时,您将其设为异步,您的init会运行,但之后会立即运行getImages,后者会在该时刻发现aImages为空。 在运行getImages之前,您应该考虑检查是否已加载所有图像以获得正确的结果。

这是一个有效的修改示例。如果需要,您可以更多地调整它! http://jsfiddle.net/EL2xR/1/

 interval = setTimeout(function() {
                _this.getImages(from, to);
            }, 1000);

检查代码中出现this.loaded的位置,我曾经知道一个标志已经加载了所有内容!然后使用setTimeout运行相同的方法,直到loaded为真!

答案 1 :(得分:0)

啊 - 我明白你的意思了。

所以问题只是当它是空的时将它打印到控制台,但是在记录之后会更新数组内容。

在初始console.log之后添加此内容以查看:

  var that = this;
  setTimeout(function() {
       console.log("Later...");
       console.log(that,that.aImages,that.aImages.length);
  });

也许令人困惑的是“这个”它的属性在控制台中存在,所以扩展精灵 - 你看到它是aImages已经满了,但是当你第一次打印时它们是空的。