我的问题应该相当简单。
如果它有助于解释,我目前正在使用名为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”中?我不想把它放到开关盒中,因为它对我来说太大了。
谢谢!
答案 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 );
}