2011-07-29 64 views
1

我有一個谷歌地圖涉及幾個不同的數據陣列,我很難有效地編碼它的部分。例如,我有這塊代碼,並且想把它變成一個函數,它爲各種不同的名稱運行相同的事情,而不僅僅是維爾馬。我可以很容易地創建一個名稱爲數組的數組,並將其作爲參數傳遞,但是如何構建像「data_NAME [k] [3]」這樣的數組名?我認爲將字符串與數組名稱的一部分連接起來很簡單,但我堅持使用語法。任何幫助是極大的讚賞。Javascript:使用數組名稱的一部分作爲參數的函數?

if (currentcroc == 'Wilma') { 

    for (k = 0; k < data_wilma.length; k++) { 

     var pointmarker = new google.maps.Marker({ 
      position: latlng_wilma[k], 
      icon: markerType['point'+data_wilma[k][3]], 
      shadow: markerType['pointshadow'], 
      shape: pointshape, 
      map:map, 
      zIndex: 4       
     }); 

     pointarray.push(pointmarker); 


     (function (k, pointmarker) { 

      google.maps.event.addListener(pointmarker, 'mouseover', function() {   
       tooltip.show('Wilma: '+data_wilma[k][2]); 
      }); 

      google.maps.event.addListener(pointmarker, 'mouseout', function() { 
       tooltip.hide(); 
      }); 

     })(k, pointmarker); 

    } 

} 

回答

3

使用關聯數組(地圖),其中關鍵是名稱(wilma,例如)和的值是二維數組:

var nameToDataMap = { 
    wilma: [ [0, 1, 2], 
      [3, 4, 5], 
      [6, 7, 8] 
     ], 
    fred: [ [0, 1, 2], 
      [3, 4, 5], 
      [6, 7, 8] 
     ] 
}; 

var nameToLatLongMap = { 
    wilma: [ ... ], 
    fred: [ ... ] 
}; 

然後您的代碼變爲:

var data = nameToDataMap[currentcroc]; 
var latLong = nameToLatLongMap[currentcroc]; 

for (k = 0; k < data.length; k++) { 

    var pointmarker = new google.maps.Marker({ 
     position: latLong[k], 
     icon: markerType['point' + data[k][3]], 
     shadow: markerType['pointshadow'], 
     shape: pointshape, 
     map:map, 
     zIndex: 4       
    }); 

    pointarray.push(pointmarker); 

    (function (k, pointmarker) { 

     google.maps.event.addListener(pointmarker, 'mouseover', function() {   
      tooltip.show(currentcroc + ': ' + data[k][2]); 
     }); 

     google.maps.event.addListener(pointmarker, 'mouseout', function() { 
      tooltip.hide(); 
     }); 

    })(k, pointmarker); 
} 
+0

輝煌!我從完全錯誤的角度接近問題。 – petroica

0

只要你從某處訪問屬性(例如,如果它是本地的),你可以訪問屬性作爲關鍵字段。

例如,

tooltip.show('Wilma: ' + this['data_' + 'wilma'][k][2]); 

應用必要的變量名和抽象:)

相關問題