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 に答える