在for循环中创建动态变量以访问数组

时间:2013-02-22 02:23:32

标签: javascript

我有多个具有相同前缀名称的数组。

    var region1 = ['01','02','03','04','05','06','07'];
    var region2 = ['08','09','11','12'];
    var region3 = ['13'];
    var region4 = ['14','22'];
    var region5 = ['10','15','16','17','18','19','20'];
    var region6 = ['21','23','24'];
    var region7 = ['25','26','27','28','29','30'];
    var region8 = ['31','33','36','37','38','39'];
    var region9 = ['32','34','35','40','41','42','43','44','45','46','47'];
    var prefecture = "33";

根据县值,我想显示地区

    if(region1.indexOf(prefecture) != -1){
        $('.region1').show();
        $('a.region1').addClass('regionSelect');
    }
    else if(region2.indexOf(prefecture) != -1){
        $('.region2').show();
        $('a.region2').addClass('regionSelect');
    }
    else if(region3.indexOf(prefecture) != -1){
        $('.region3').show();
        $('a.region3').addClass('regionSelect');
    }
    else if(region4.indexOf(prefecture) != -1){
        $('.region4').show();
        $('a.region4').addClass('regionSelect');
    }
    else if(region5.indexOf(prefecture) != -1){
        $('.region5').show();
        $('a.region5').addClass('regionSelect');
    }
    else if(region6.indexOf(prefecture) != -1){
        $('.region6').show();
        $('a.region6').addClass('regionSelect');
    }
    else if(region7.indexOf(prefecture) != -1){
        $('.region7').show();
        $('a.region7').addClass('regionSelect');
    }
    else if(region8.indexOf(prefecture) != -1){
        $('.region8').show();
        $('a.region8').addClass('regionSelect');
    }

工作正常

但我这样做是为了尽量减少代码。

    for(var i=1; i<=9; i++){
        if('region'+i.indexOf(prefecture) != -1){
            $('.region'+i).show();
                $('.region'+i).addClass('regionSelect');
        }
    }

它表示i.indexOf未定义

4 个答案:

答案 0 :(得分:5)

使用数组而不是变量。

var regions = [
 ['01','02','03','04','05','06','07'],
 ['08','09','11','12'],
 // and so on
]

然后按索引选择

for(var i=0; i<9; i++){
    if(regions[i].indexOf(prefecture) != -1){
        $('.region'+(i+1)).show()
                          .addClass('regionSelect');
    }
}

答案 1 :(得分:2)

我在这里看到很多问题,当人们尝试使用“动态变量”名称时,已经有其他精彩的数据结构,例如Array和Object可用于实现这个目的。

var region = {
    "1": ['01','02','03','04','05','06','07'],
    "2": ['08','09','11','12'],
    "3": ['13'],
    /* snip */
};

for(var i=1; i<=9; i++){
    if(region[i].indexOf(prefecture) != -1){
        $('.region'+i).show();
            $('.region'+i).addClass('regionSelect');
    }
}

如果绝对必须使用动态变量名,则不能使用var。如果它们是全局的(window),则可以执行此操作,然后通过window['region' + i]访问它们。我根本不推荐这个

答案 2 :(得分:1)

您需要使用[]语法引用变量所附加的对象来引用它的子项,如果它们位于全局范围内,您可以尝试使用window ...

for(var i=1; i<=9; i++){
    if(window['region'+i].indexOf(prefecture) != -1){
        $('.region'+i).show();
            $('.region'+i).addClass('regionSelect');
    }
}

否则,我希望this['region'+i].indexOf etc...也能正常工作

答案 3 :(得分:-1)

优先问题。

你需要写

('region'+i).indexOf(prefecture)

否则它被理解为

'region'+(i.indexOf(prefecture))

正如FelixKling在下面指出的那样,这会修复语法错误,但是无法正常工作,因为你要在字符串"region1"内寻找县。检查其他答案,看看如何真正编码。< / p>