Bruno Morgado
Bruno Morgado

Reputation: 507

javascript hash tables problem

I'm trying to add markers to a google maps by iterating through a list and retrieving some information. I'm using the prototype library. The code is the following:

    var point = new Array();
    var myMarkerOptions = new Array();
    var marker = new Array();

    recommendedList.each(function(item){
        point[item.location.ID] = new google.maps.LatLng(item.location.lat, item.location.lng);
        myMarkerOptions[item.location.ID] = {
              position: point[item.location.ID], 
              map: map
            };
        marker[item.location.ID] = new google.maps.Marker(myMarkerOption[item.location.ID]);    
        });     

where the recommendedList is a JSON response of the form:

[
 {"artist":"artist1","location":{"lat":"50.952226","lng":"5.34832","ID":28}},
 {"artist":"artist2","location":{"lat":"52.362287","lng":"4.883965","ID":32}},
 ...
]

However, this is not working. I know that the problem is not about the JSON or the google map, because I tried a simpler version with the following code and it worked:

      var myLatlng = new google.maps.LatLng(recommendedList[0].location.lat,recommendedList[0].location.lng);

      var marker = new google.maps.Marker({
          position: myLatlng, 
          map: map
      }); 

So the problem must be in the iteration and the hash maps. Anyone can see the problem? Thanks!

Upvotes: 1

Views: 324

Answers (3)

James
James

Reputation: 22247

Simple enough to test without the .each

for (var i=0, item; item = recommendedList[i]; i++) {
    point[item.location.ID] = new google.maps.LatLng(item.location.lat, item.location.lng);
    myMarkerOptions[item.location.ID] = {
        position: point[item.location.ID], 
        map: map
    };
    marker[item.location.ID] = new google.maps.Marker(myMarkerOption[item.location.ID]);    
}

You can also simplify this quite a lot, unless you "need" those other arrays:

for (var i=0, item; item = recommendedList[i]; i++) {
    marker[item.location.ID] = new google.maps.Marker({
      new google.maps.LatLng(item.location.lat, item.location.lng),
      map
    });
}

Upvotes: 1

Cybercartel
Cybercartel

Reputation: 12592

Prototype each iterator doesn't support JSON or object data type.

Upvotes: 0

Dan F
Dan F

Reputation: 12051

I think it could be the array accessors you're using. What are you doing the point, myMarkerOptions and marker arrays once you're done with them?

Can you try declaring them as

var point = {};
var myMarkerOptions = {};
var marker = {};

That'll let you refer to them as point[item.location.ID] (etc). I think with the item.ID property being a number, JS is trying to set that numeric index of the array, rather than creating a new property in your hash.

Upvotes: 0

Related Questions