2011-07-29 10 views
1

Googleマップにはいくつかの異なるデータ配列が含まれており、効率的にセクションをコーディングするのに問題があります。たとえば、私はこのコードを持っており、ウィルマだけでなく、さまざまな異なる名前に対して同じことを実行する関数にしたいと考えています。私は簡単に名前を保持している配列を作成し、それをパラメータとして渡すことができますが、 "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)名である連想配列(マップ)を使用し、値を2次元配列である:

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

、必要に応じて変数名と抽象:)