Javascript哈希表问题

javascript hash tables problem

本文关键字:问题 哈希表 Javascript      更新时间:2023-09-26

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

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

,其中推荐人列表是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
      }); 

所以问题一定出在迭代和哈希映射上。有人看到问题了吗?谢谢!

很简单,不需要。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
    });
}

我认为它可能是你正在使用的数组访问器。在处理完point, myMarkerOptionsmarker数组之后你会怎么做呢?

你可以试着将它们声明为

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

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

Prototype each迭代器不支持JSON或对象数据类型