簡體   English   中英

在for循環內創建動態變量以訪問數組

[英]create dynamic variable inside for loop to access array

我有多個具有相同前綴名稱的數組。

    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沒有定義

使用數組而不是變量。

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

我在這里看到了很多問題,當人們已經有其他出色的數據結構(例如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]訪問它們。 我不建議這樣做

您需要使用[]語法引用變量所附加的對象,以引用其子對象,如果它們在全局范圍內,則可以嘗試使用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...也能正常工作

優先問題。

你需要寫

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

否則被理解為

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

正如FelixKling在下面指出的那樣,此操作可修復語法錯誤,但將不起作用,因為您將在字符串"region1"等中查找該縣。請查看其他答案以查看如何進行真正的編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM