Javascript 在循环内部创建动态变量以访问数组

Javascript 在循环内部创建动态变量以访问数组,javascript,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',

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

    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');
        }
    }
(var i=1;i优先级问题的

你需要写作

('region'+i).indexOf(prefecture)
否则,它被理解为

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

正如下面FelixKling所指出的,这修复了语法错误,但不起作用,因为您将在字符串
“region1”
等中查找辖区。请查看其他答案,了解如何真正编写此代码。

使用数组而不是变量

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');
    }
}

对于(var i=0;i您需要引用变量附加到的对象,使用
[]
语法引用它的子对象,如果它们在全局范围内,您可以尝试使用
窗口

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

for(var i=1;i我在这里看到了很多问题,人们试图使用“动态变量”名称,而现在已经有了其他出色的数据结构,如数组和对象,可用于此确切目的

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


用于(var i=1;iI已经可以告诉您,这将始终返回
-1
,因为字符串
regionX
将永远不会包含
地区
@FelixKling:…Doh.我正在处理文字错误,但它后面仍然有逻辑错误…OP使用
.regionX
a.regionX
作为选择项第一个例子中的rs。它们可能指的不是相同的元素。@FelixKling:True。我在排除
a
的问题中基于重构例子的选择。非常感谢。看起来非常干净和完美
for(var i=1; i<=9; i++){
    if(region[i].indexOf(prefecture) != -1){
        $('.region'+i).show();
            $('.region'+i).addClass('regionSelect');
    }
}