James
James

Reputation: 2860

Cannot access variable in Javascript array. Console.log says undefined

I have an object which contains an array that I then pass to another function in order for that function to use. The only thing is, when I go to access these variables, console.log says they are undefined. It's strange as when I log the whole array it ways the values are there but when I go to access the array element specifically, it returns undefined. Here is my code:

googleMapsFunctions.prototype.calculateDistances = function() {
        var that = this;    
        console.log(that.latLngArray);
        var closeClubs = [];
        var sortable = [];
        var resultsArray = [];
        jQuery(this.clubs).each(function(key, club) {
            var clubLatLng = new google.maps.LatLng(club.latitude, club.longitude);         
            var distanceFromLoc = clubLatLng.distanceFrom(that, "", "");        
            //alert(distanceFromLoc);
            //that.clubs[key].distance = distanceFromLoc;
            //closeClubs.push(club);
        });
        closeClubs.sort(function(a, b) {
            return a.distance - b.distance;
        });

    }

googleMapsFunctions.prototype.setLatLng = function() {
        var that = this;
        this.geocoder.geocode({'address' : this.location}, function(results, status) {
            if(status === "OK") {                   
                that.latLngArray.push(parseFloat(results[0].geometry.location.lat()));
                that.latLngArray.push(parseFloat(results[0].geometry.location.lng()));                  
            }               
        });
    }

//Client Code

var googleMapsClass = new googleMapsFunctions(JSONItems, searchTerm);
    googleMapsClass.setLatLng();        
    googleMapsClass.calculateDistances();

I am using console.log to print out the array (that.latLngArray) which gives the following:

enter image description here

I then click on the aray brackets and it takes me to the following (which is the correct information).

enter image description here

I just can't seem to access these variables and it says that they are undefined. Can anyone see what is happening here? Thanks

Upvotes: 0

Views: 311

Answers (1)

Pointy
Pointy

Reputation: 413996

Simplest thing to do would be to just move the distance calculation inside the callback:

googleMapsFunctions.prototype.setLatLng = function() {
    var that = this;
    this.geocoder.geocode({'address' : this.location}, function(results, status) {
        if(status === "OK") {                   
            that.latLngArray.push(parseFloat(results[0].geometry.location.lat()));
            that.latLngArray.push(parseFloat(results[0].geometry.location.lng()));
            // now it's safe to check the distances
            that.calculateDistances();
        }               
    });
}

Upvotes: 1

Related Questions