JavaScript: функция с частью имени массива в качестве параметра? - PullRequest
1 голос
/ 29 июля 2011

У меня есть карта Google, включающая несколько различных массивов данных, и у меня возникают проблемы с ее эффективным кодированием.Например, у меня есть этот кусок кода, и я хотел бы превратить его в функцию, которая выполняет одно и то же для разных имен, а не только для Вилмы.Я могу легко создать массив, содержащий имена, и передать его в качестве параметра, но тогда как мне создать имена массивов, такие как «data_NAME [k] [3]»?Я предполагаю, что должно быть просто объединить строку с частью имени массива, но я застрял в синтаксисе.Любая помощь с благодарностью.

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

    }   

}

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

Используйте ассоциативный массив (map), где ключом является имя (например, wilma), а значением является 2d-массив:

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 голосов
/ 29 июля 2011

Пока вы получаете доступ к атрибуту откуда-то (например, если он локальный), вы можете обращаться к атрибутам как к ключевым полям.

Например.

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

Применение имен переменныхи абстракции по мере необходимости:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...