如何将字符串转换为对象引用或将数字值添加到对象引用名称?

时间:2014-02-11 07:21:56

标签: javascript leaflet

我的问题应该相当简单。

如果它有助于解释,我目前正在使用名为Leaflet的javascript库。这个库允许我创建一个可自定义的在线地图,我可以添加标记,这就是我在这里做的事情:

var iconId = null;

for (var i=1;i<4;i++)
{ 
  iconId = "mapMarker" + i; // L.marker does not accept this because it is a string and not an object
  var marker = L.marker([boulder.latitude, boulder.longitude], {icon: iconId}).addTo(map);
}

在另一个JS文件中,我创建了3个mapMarker对象,其属性符合Leaflet的文档。

var mapMarker1 = L.icon({
    iconUrl: 'img/mapMarker1.png'
});
var mapMarker2 = L.icon({
    iconUrl: 'img/mapMarker1.png'
});
var mapMarker3 = L.icon({
    iconUrl: 'img/mapMarker1.png'
});

正如您所看到的,我目前有一个循环,它创建一个字符串,其中包含我想要传递给icon参数的对象的名称,但icon参数需要一个对象,而不是一个字符串。有没有办法可以动态创建对象名称并将它们放在“iconId”中?我不想把它放到开关盒中,因为它对我来说太大了。

谢谢!

1 个答案:

答案 0 :(得分:1)

每当您发现自己创建一系列名称相似且名称中的数字递增的变量时,您应该使用专为此目的而设计的JavaScript中的功能:数组。

创建地图标记数组而不是编号变量:

var mapMarkers = [
    L.icon({
        iconUrl: 'img/mapMarker1.png'
    }),
    L.icon({
        iconUrl: 'img/mapMarker1.png'
    }),
    L.icon({
        iconUrl: 'img/mapMarker1.png'
    })
];

现在只需遍历该数组:

for( var i = 0;  i < mapMarkers.length;  i++ ) { 
    var marker = L.marker(
        [ boulder.latitude, boulder.longitude ],
        { icon: mapMarkers[i] }
    ).addTo( map );
}