2011-07-17 129 views
1

我試圖通過迭代列表並檢索一些信息來將標記添加到谷歌地圖。我正在使用原型庫。該代碼是下面的:JavaScript哈希表問題

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

所以這個問題必須在迭代和哈希映射。 任何人都可以看到問題?謝謝!

+1

有什麼錯誤,你」重新獲得?如果你告訴我們,我們實際上可以幫助你(而不是(或多或少)進行受過教育的猜測)。 –

+0

爲什麼使用數組而不是對象? –

+0

你是否已經通過調試器循環並確認'recommendedList'正在按預期遍歷? – clockworkgeek

回答

1

夠簡單不。每次測試

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

有趣的方法來迭代一個數組。這也可以在PHP中工作嗎? – Bytemain

+0

感謝您提供非常簡潔的代碼。有效。 –

+0

@Jitamaro for循環將迭代器與測試數組[i]是否存在並將其分配給項目相結合。在PHP中,我會使用foreach,它基本上做同樣的事情。 – James

0

我認爲它可能是你使用的數組訪問器。一旦你完成了它們,你在做什麼pointmyMarkerOptions和數組?

你可以嘗試聲明爲

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

這會讓你把它們稱爲point[item.location.ID](ETC)。我認爲item.ID屬性是一個數字,JS試圖設置數組的數字索引,而不是在你的哈希中創建一個新的屬性。

+0

我想到了同樣的事情(請參閱我對他的問題的評論),但後來我想起他正在使用'prototype'框架。 –

+0

是的,我記得原型做奇數的事情,以陣列和/或字符串原型來介紹新的方法。雖然沒有氣味,但值得一試:-) –

+0

您能否澄清使用語法聲明對象的效果:var point = {};感謝您的迴應。 –

0

原型每個迭代器都不支持JSON或對象數據類型。