2011-07-29 3 views
1

여러 개의 데이터 배열이 포함 된 Google지도가 있는데 효율적으로 섹션을 코딩하는 데 문제가 있습니다. 예를 들어, 나는이 코드 덩어리를 가지고 있으며 Wilma 대신 다양한 이름에 대해 같은 것을 실행하는 함수로 바꾸고 싶습니다. 이름을 가진 배열을 쉽게 만들 수 있고 그것을 매개 변수로 전달할 수 있습니다. 그런 다음 어떻게 "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]); 

필요한 변수 이름과 추상화 :

관련 문제