我正在编写 Google Maps API 脚本,但在使用我的数组时遇到问题。下面的屏幕截图显示了下面代码中的 console.log 语句。有两个数组,它们看起来正是我想要的样子。然后我使用 console.log 来验证长度(在本例中为 6)。然后我开始一个从 0 到 5(6 减 1)的循环。但在 (markers[i][0]) 之后验证第一个 console.log 返回 TypeError: x[r] is undefined。我很困惑为什么我可以清楚地看到我试图提取值的正上方的数组。
if ($('#propertymap').length){
var map=new google.maps.Map(document.getElementById('propertymap'), {
center: {lat: 37.09024, lng: -95.712891},
zoom: 5
});
var bounds=new google.maps.LatLngBounds();
var geocoder=new google.maps.Geocoder();
var id;
var location;
var street;
var city;
var state;
var zip;
var squarefootage;
var ownedacreage;
var leasedacreage;
var hotelrooms;
var website;
var markers=[];
var infocontent=[];
$.post('/_getproperties.php', {task:'getproperties'}, function(result){
var locationsSplit=result.replace('{', '').split('}');
var i;
for (i=0; i<locationsSplit.length-1; i++){
var currentFields=locationsSplit[i].split('|');
id=currentFields[0];
location=currentFields[1];
street=currentFields[2];
city=currentFields[3];
state=currentFields[4];
zip=currentFields[5];
squarefootage=currentFields[6];
ownedacreage=currentFields[7];
leasedacreage=currentFields[8];
hotelrooms=currentFields[9];
website=currentFields[10];
geocodeAddress(location, street + ', ' + city + ', ' + state + ' ' + zip, location + '<br />' + street + '<br />' + city + ', ' + state + ' ' + zip, i);
}
console.log(markers);
console.log(infocontent);
console.log(locationsSplit.length-1);
for (i=0; i<locationsSplit.length-1; i++){
console.log(i);
console.log(markers[i][0]);
}
});
function geocodeAddress(locationtitle, locationaddress, locationdescription, i){
geocoder.geocode({'address': locationaddress}, function(results, status){
if (status==='OK'){
markers[i]=[];
markers[i][0]=locationtitle;
markers[i][1]=results[0].geometry.location.lat();
markers[i][2]=results[0].geometry.location.lng();
infocontent[i]=[];
infocontent[i][0]=locationdescription;
} else {
console.log('Geocode was not successful for the following reason: ' + status);
}
});
}
}
最佳答案
geocoder.geocode
似乎是一个异步操作。当程序执行 for 循环的第一次迭代时,标记和 infoContent 数组尚未填充。
您在控制台中看到结果为填充数组的原因是因为这些项目是对象,并且当设法扩展它们时,它们已经填充了数据。 控制台不会显示您调用 console.log 时的数据,而是显示此时对象的内容。
要验证这一点,不要将标记实例传递到 console.log,而是通过调用 console.log(JSON.stringify(markers))
传递字符串化版本。 。我打赌它会显示一个空数组。
关于javascript - 在控制台中验证数组后,多维数组返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50514464/