javascript - 在控制台中验证数组后,多维数组返回未定义

标签 javascript arrays

我正在编写 Google Maps API 脚本,但在使用我的数组时遇到问题。下面的屏幕截图显示了下面代码中的 console.log 语句。有两个数组,它们看起来正是我想要的样子。然后我使用 console.log 来验证长度(在本例中为 6)。然后我开始一个从 0 到 5(6 减 1)的循环。但在 (markers[i][0]) 之后验证第一个 console.log 返回 TypeError: x[r] is undefined。我很困惑为什么我可以清楚地看到我试图提取值的正上方的数组。

screenshot

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/

相关文章:

javascript - 延迟对象链可以用于事件处理程序吗?

arrays - Perl:计算复杂数据结构中的元素

c - 2维数组为什么我必须在C中声明列的大小

javascript - 将对象的递归数组转换为javascript中的嵌套或递归对象

java - JSONArray在android中抛出内存异常

javascript - 如何为多个 div 的内部/外部事件 'click' 设置条件?

javascript - 如何扩展 Angularjs ng-include 指令?

javascript - 在javascript中将yyyy-MM-dd转换为MM/dd/yyyy

javascript - 如何在javascript中正确转换html?

c - 从 c 中的函数返回二维数组时出错