我在谷歌地图上工作,要创建三个以上的瓷砖叠加层。一个例子:
瓷砖叠加
var parkingOptions = { //Parking Overlay
getTileUrl: function(coord, zoom) {
return "/maps/tiles/tilesparking/" + zoom + "_" + coord.x + "_" + coord.y + ".png";
},
tileSize: new google.maps.Size(256, 256)
};
var parkingMapType = new google.maps.ImageMapType(parkingOptions);
但是,为了避免在我的映射范围之外丢失图块而导致 404 错误,我的代码稍微复杂一些;因此,我打算创建一个循环,将分配给每个叠加层的特定关键字(此处为“停车”)插入到上述代码中。因此:
循环
var tileNames = ["base", "parking", "access"];
for (var i = 0; i < tileNames.length; i++) {
//insert Tile Overlay code here
};
但是,我有一个特殊的问题:我找不到从 tileNames 数组中获取字符串并使用它们来初始化 Tile Overlay 代码中的两个变量的方法。理想情况下,我想实现这样的目标:
尝试 1
var tileNames[1] + "Options" = { //ideally: var parkingOptions = {
//insert remaining code
};
但是,这不起作用,我也没有真正期望它。也不会尝试创建那些完整的字符串并尝试将其插入到初始化中:
尝试 2
var newOptions = tileNames[1] + "Options";
var newOptions = {
//insert remaining code
};
因此,有没有办法将字符串放入初始化变量中?
注意:我已经包含了我自己的替代解决方案作为答案。它应该可以工作,但它会破坏变量的名称并将其替换为一个不起眼的数组变量。我最好保留一个描述性变量名称,因为它们经常用于在结果代码中添加和隐藏覆盖。
解决方案 无论如何对于这个问题......
var tileNames = ["beloit", "parking", "access"];
var mapType = {};
for (var i = 0; i < tileNames.length; i++) {
var tileOptions = {
getTileUrl: function(coord, zoom) {
return "/maps/tiles/tiles" + tileNames[i] + "/" + zoom + "_" + coord.x + "_" + coord.y + ".png";
},
tileSize: new google.maps.Size(256, 256)
};
mapType[tileNames[i]] = new google.maps.ImageMapType(tileOptions);
};
谜题的另一部分,getTileUrl 函数中的“tileNames[i]”是未定义的,因为函数在执行时需要它,而不是将名称字符串放入函数中;但是,这是一个新问题:Javascript: Making a variable static when defined a function in a loop?