javascript哈希表问题

时间:2011-07-17 14:34:14

标签: javascript hashtable prototypejs

我正在尝试通过迭代列表并检索一些信息来为谷歌地图添加标记。我正在使用原型库。代码如下:

    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]);    
        });     

其中recommendedList是表单的JSON响应:

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

但是,这不起作用。 我知道问题不是关于JSON或谷歌地图,因为我尝试了一个更简单的版本,使用以下代码并且它有效:

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

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

所以问题必须在迭代和哈希映射中。 任何人都可以看到问题?谢谢!

3 个答案:

答案 0 :(得分:1)

简单到没有.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]);    
}

除非你“需要”其他数组,否则你也可以对此进行简化:

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
    });
}

答案 1 :(得分:0)

我认为它可能是您正在使用的数组访问器。一旦你完成了pointmyMarkerOptionsmarker阵列,你在做什么?

你可以尝试将它们声明为

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

这会让你将它们称为point[item.location.ID](等)。我认为item.ID属性是一个数字,JS正在尝试设置数组的数字索引,而不是在哈希中创建一个新属性。

答案 2 :(得分:0)

每个迭代器的原型不支持JSON或对象数据类型。