我正面临一些愚蠢的问题,我知道我错过了什么。
我有一个空白数组,我正在使用.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);
对于日志中的结果 -
我已经检查了其他相关问题 -
答案 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);
这将创建一个新数组并测量长度。但实际上,您应该在异步回调函数中完成所有工作。