简单数组长度 - 即使存在内容也总是0

时间:2016-07-17 22:29:56

标签: javascript arrays push variable-length

我正面临一些愚蠢的问题,我知道我错过了什么。

我有一个空白数组,我正在使用.push()方法推送内容。

现在当我打印完整的数组时,我得到了值,但是当我使用array.length时,它总是为零。我知道这是我很遗憾的事情。

var markersToPush = [];

for (var i = 0; i < contactList.length; i++) {
    console.log('conatcat addres', contactList[i].MailingStreet);
    geocoder.geocode({
        'address': contactList[i].MailingStreet
    }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
            var marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location
            });
            markersToPush.push(marker.getPosition());
        } else {
            alert("Geocode was not successful for the following reason: " + status);
        }
    });
}
console.log('markers to push-->', markersToPush);
console.log('markers length-->', markersToPush.length);

对于日志中的结果 -

enter image description here

我已经检查了其他相关问题 -

  1. Javascript array returns length as 0 always even there are elements in it
  2. Javascript array returns length as 0 always even there are elements in it
  3. Array Length returns 0

1 个答案:

答案 0 :(得分:0)

@nnnnnn在评论中最有可能是正确的。您似乎正在对geocoder.geocode()进行异步调用。您应该尝试在回调函数中执行控制台日志:

var marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location
            });
            markersToPush.push(marker.getPosition());

            // log the length value here
            console.log('markers length-->', markersToPush.length);
        } else {

当您记录对象时,您看到Array(10)的原因是浏览器更新缓冲区。您可以尝试使用slice()在控制台中使用当前代码强制执行此操作:

console.log('markers length-->', markersToPush.slice().length);

这将创建一个新数组并测量长度。但实际上,您应该在异步回调函数中完成所有工作。