【问题标题】:Javascript: Function with part of an array name as a parameter?Javascript:以数组名称的一部分作为参数的函数?
【发布时间】:2011-07-29 16:13:21
【问题描述】:

我有一个包含多个不同数据数组的 Google 地图,但我无法有效地对其中的各个部分进行编码。例如,我有这段代码,想把它变成一个函数,为各种不同的名字运行相同的东西,而不仅仅是 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); 

    }   

}

【问题讨论】:

    标签: javascript arrays function


    【解决方案1】:

    使用关联数组(映射),其中键是名称(例如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); 
    }   
    

    【讨论】:

    • 太棒了!我从完全错误的角度解决问题。
    【解决方案2】:

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

    例如。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 2020-12-14
      • 2013-01-13
      • 1970-01-01
      相关资源
      最近更新 更多