JavaScript数组长度显示0

时间:2016-11-15 10:01:14

标签: javascript arrays google-maps global-variables

使用地理编码为地址动态获取LatLng时,我遇到了一个奇怪的问题。我已经声明了一个全局数组来存储地址的latLng值。在我控制台记录该数组的值后,将数据存储到该数组后,它会完美地显示这些值。但是,当我控制台记录该数组长度的值时,它显示0.对我来说,一切似乎都有些奇怪。无法理解我的代码中的确切问题。

以下是用于获取所有位置的HTML代码。

<div id="locations" class="col-sm-4">
        <fieldset>
        <legend class="section">Redemption Locations (<?php echo count($locations); ?>)</legend>
        <div id="stats_div" style="overflow-y: scroll; height: 335px;">
            <?php foreach($locations as $location): ?>
                <div class="stats" data-id="<?php echo $location->address; ?>">
                    <span class="stat">
                        <strong><?= $location->label ? $location->label : $location->name; ?></strong>
                        <br>
                        <?php echo $location->address; ?>
                        <br>
                        <?php echo $location->phone_number; ?>
                    </span>
                </div>
            <?php endforeach; ?>
        </div>
        </fieldset>
    </div>

这些地点看起来像加拿大安大略省滑铁卢里根纳街25号,#34;

这是用于显示带有位置标记的地图的JS代码。

var geocoder;
var map;
var addresses = [];
/*var locations = [
    [43.4643342, -80.52126329999999],
    [43.6331368, -79.42370740000001]
];*/
var locations = [];

function getAddress() {
    var count = $("#locations").find(".stats").length;
    for (var i=0; i<count; i++)
        addresses.push($("#locations .stats:eq('"+i+"')").attr('data-id'));
}

function storeLatLng(lat, lng) {
    var newarr = [];
    newarr.push(lat, lng);
    locations.push(newarr);

    console.log('Array Length: '+locations.length);
}

function getLatLong() {
    getAddress();
    var i;
    geocoder = new google.maps.Geocoder();

    for (i in addresses) {
        var address = addresses[i];
        geocoder.geocode({'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var lat = results[0].geometry.location.lat();
                var lng = results[0].geometry.location.lng();
                storeLatLng(lat, lng);
            }
        });
    }
}

function initializeMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
        zoom: 4,
        center: {lat: 53, lng: -92.220885},
        scrollwheel: false,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });



    var
        bounds = new google.maps.LatLngBounds(),
        marker = '';

    getLatLong();

    console.log(locations);
    console.log(locations.length);

    for (var i = 0; i < locations.length; i++) {
        marker = new google.maps.Marker({
            position: {lat: locations[i][0], lng: locations[i][1]},
            map: map
        });

        bounds.extend(marker.position);
    }

    map.fitBounds(bounds);
}

$(document).ready(function(){
    initializeMap();
});

要检查locations数组的值,只需在循环之前和循环中放置一个控制台日志。位置数组的输出是完美的但是数组长度的输出是0.我不能理解它为什么显示0,因为数组的所有值对我来说都是完美的。当我将静态值放在该数组上时(在代码中注释掉)。它完美地显示了数组值和数组长度。

所以,我的问题是关于名为locations的全局数组。如果你们仔细检查,我已经在我的代码中放了三次控制台日志。一个在storeLatLng(),另外两个在initializeMap()。在storeLatLng()函数中,它可以完美地打印出值。在initializeMap()中,First控制台lg打印locations数组的值。看起来很完美。但是在那一行之后,当我控制台记录该数组的长度时,它显示0.或更好的理解,我附上控制台日志截图。

Image of console log

0 个答案:

没有答案