Javascript:函数与数组名称的一部分作为参数?

时间:2011-07-29 16:13:22

标签: javascript arrays function

我有一个谷歌地图涉及几个不同的数据数组,我无法有效地编写部分数据。例如,我有这个代码块,并希望将它变成一个函数,它为各种不同的名称而不仅仅是Wilma运行相同的东西。我可以很容易地创建一个包含名称的数组,并将其作为参数传递,但那么我将如何构建像“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 个答案:

答案 0 :(得分:3)

使用关键数组(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); 
}   

答案 1 :(得分:0)

只要您从某个地方访问该属性(例如,如果它是本地的),您就可以将属性作为关键字段进行访问。

例如

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

根据需要应用变量名称和抽象:)