Javascript:从字符串初始化变量?

Javascript:从字符串初始化变量?,javascript,arrays,string,google-maps,variables,Javascript,Arrays,String,Google Maps,Variables,我在谷歌地图工作,有三个以上的瓷砖覆盖创建。例如: 平铺覆盖层 var parkingOptions = { //Parking Overlay getTileUrl: function(coord, zoom) { return "/maps/tiles/tilesparking/" + zoom + "_" + coord.x + "_" + coord.y + ".png"; }, tileSize: new

我在谷歌地图工作,有三个以上的瓷砖覆盖创建。例如:

平铺覆盖层

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错误,在我的映射范围之外丢失了分片,我的代码稍微复杂一些;因此,我打算创建一个循环,将指定给每个覆盖的特定关键字(这里称为“parking”)插入到上述代码中。因此:

用于循环

var tileNames = ["base", "parking", "access"];

for (var i = 0; i < tileNames.length; i++) {
    //insert Tile Overlay code here
};
然而,这不起作用,我也没有真正期望它会起作用。也不会尝试创建这些完整字符串并尝试将其插入初始化:

尝试2

var newOptions = tileNames[1] + "Options";
var newOptions = {
    //insert remaining code
};
因此,有没有办法将字符串放入初始化变量中


注意:我已经包括了我自己的问题解决方案作为答案。它应该可以工作,但它会破坏变量的名称,并用一个不起眼的数组变量替换它。我最好保留一个描述性变量名,因为它们经常用于在生成的代码中添加和隐藏覆盖


这个问题的解决方案无论如何

var tileNames=[“beloit”、“parking”、“access”];
var-mapType={};
对于(var i=0;i

谜题的另一部分,getTileUrl函数中的“tileNames[i]”未定义,因为函数在执行时需要它,而不是将名称字符串放入函数中;然而,这是一个新的问题:

现在,我不知道上述是否确实可行(我更愿意这样做,我将在下面解释),但在起草这个问题时,我之前阅读的各种其他Q/a开始变得更有意义。他们的一般信息:“使用数组”:

可能的解决方案 (已编辑;现在应该可以使用。)

var tileNames=[“beloit”、“parking”、“access”]//将被多次使用。
变量tileMapType=[];
对于(var i=0;i
这种方法的唯一问题是,在下面的代码中,我必须将这些映射类型放置到映射中,并将它们切换为可见和不可见,而使用不起眼的tileMapType[x]这样做会妨碍整体可读性。(也许这没有我想的那么重要,但仍然是。>.>)

你不能这样做:

var tileNames[1] + "Options" = {
  //insert remaining code
};
但你可以这样做:

window['a'] = 'b';
alert(a); // shows 'b'
或者如果你在一个函数中

this['a'] = 'b';
编辑:


可以使用eval()读取这样的变量,但不能设置它们

例如:

var a=“b”; var b=“c”;
评估(a);//返回“c”

假设我理解了您的问题,您可以将磁贴封装在一个对象中,并按您提供的名称引用该层:

var tileNames = ["base", "parking", "access"];
var Tiles = {};

for (var i = 0; i < tileNames.length; i++) {
    Tiles[tileNames[i]] = makeOverlay(tileNames[i], coords, zoom);
};

//iterate the maps
for (var tile in Tiles)
   alert(Tiles[tile].someGoogleMapPropery)

//individually     
alert (Tiles.base.someGoogleMapPropery)
alert (Tiles.parking.someGoogleMapPropery)
//or
alert (Tiles["access"].someGoogleMapPropery)


function makeOverlay(name, coords, zoom) {
    return new google.maps.ImageMapType({
            getTileUrl: function(coord, zoom) {
                return "/maps/tiles/tiles" + name + "/" + zoom + "_" + coord.x + "_" + coord.y + ".png";
            },
            tileSize: new google.maps.Size(256, 256)
        });
}​
var tileNames=[“基本”、“停车”、“访问”];
var Tiles={};
对于(var i=0;i
这些是关联数组还是某种符号?我的印象是Javascript不显式支持关联数组:这是一个对象(关联数组是对象),object.a==object['a'],不幸的是,我想设置它们。另外,您所指的“像那样读取变量”是指什么部分?可以使用另一个变量的内容作为名称来读取变量。(即变量x包含我实际试图读取的变量的名称)我想我明白你的意思了:
b=new google.maps;baseMapType=b;eval(baseMapType)
。不我们仍然存在从tileNames数组中命名“baseMapType”的问题,即类似于
tileNames[0]+“MapType//的内容应该是“baseMapType”
非常感谢您的回答。当您的示例让我清楚cuzzea的意图时,我正在玩弄对象。
window['a'] = 'b';
alert(a); // shows 'b'
this['a'] = 'b';
var obj = {};
obj.a = 'a';
// obj.a == obj['a']
alert(obj['a']) // alerts a
var tileNames = ["base", "parking", "access"];
var Tiles = {};

for (var i = 0; i < tileNames.length; i++) {
    Tiles[tileNames[i]] = makeOverlay(tileNames[i], coords, zoom);
};

//iterate the maps
for (var tile in Tiles)
   alert(Tiles[tile].someGoogleMapPropery)

//individually     
alert (Tiles.base.someGoogleMapPropery)
alert (Tiles.parking.someGoogleMapPropery)
//or
alert (Tiles["access"].someGoogleMapPropery)


function makeOverlay(name, coords, zoom) {
    return new google.maps.ImageMapType({
            getTileUrl: function(coord, zoom) {
                return "/maps/tiles/tiles" + name + "/" + zoom + "_" + coord.x + "_" + coord.y + ".png";
            },
            tileSize: new google.maps.Size(256, 256)
        });
}​