0

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

    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

4 回答 4

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');
    }
}
于 2013-02-22T02:27:48.477 回答
2

我在这里看到了很多问题,当已经有其他出色的数据结构(例如数组和对象)可用于服务于这个确切目的时,人们尝试使用“动态变量”名称。

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. 如果它们是全局的(on window),您可以这样做,然后通过window['region' + i]. 我根本不推荐这个。

于 2013-02-22T02:28:23.287 回答
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...也能工作

于 2013-02-22T02:28:12.143 回答
-1

优先级问题。

你需要写

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

否则理解为

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

正如下面的 FelixKling 所指出的,这可以修复语法错误,但不会起作用,因为您会在字符串"region1"等中寻找县。检查其他答案以了解如何真正编码。

于 2013-02-22T02:26:22.980 回答