2014-07-10 182 views
-1

我想知道是否有更好的方法來寫這個for循環沒有switch語句。請忽略for循環內的附加內容,這僅僅是爲了演示。For loop without switch

我想知道的是,如果有一種方法來連接變量名稱?例如,而不是使用變量名稱,並使用switch語句的值賦給變量名,有沒有辦法做這樣的事情:

file + i // this will be the var file0, file1, file2. 


var name = null, 
    content = null; 

var file0 = { 
    name: null; 
    }, 
// file2, file3, file4. 
    file5 = { 
    name: null; 
    }; 


// Something's length is < 10. 
for(var i = 0, len = something.length; i < len; i++){ 
    switch(i){ 
     case 0: 
      name = file0.name; 
      break; 
     case 1: 
      name = file1.name; 
      break; 
     case 2: 
      name = file2.name; 
      break; 
     case 3: 
      name = file3.name; 
      break; 
     case 4: 
      name = file4.name; 
      break; 
     case 5: 
      name = file5.name; 
      break; 
     default: 
      break; 
    } 

    // Better way to write name below? 
    $("#someContainer").append('<li class="file" id="file' + i + '">' + name + '</li'); 
} 

請不下來投票。

謝謝。

+2

使用文件的數組,而不是用數字變量。 – elclanrs

+0

你可以這樣做'var f =「file」+ 0 +「.txt」;' – hex494D49

回答

2

您可以按名稱訪問變量:

var file4 = 42; 
this["file"+4]++; 
alert(file4) // 43 

不知道這是更適合使用此窗口訪問全局變量。

+0

這就是我一直在尋找的東西。你能解釋一下這個窗口[]在這裏做什麼嗎?謝謝。 – chatu

+0

窗口是變量去的對象。也許*這個*會更合適,我會糾正它。 –

+0

它看起來像使用窗口會污染全球範圍,這可能是混亂的,當你在jQuery或其他功能內調用它。有沒有另一種方法可以做到這一點?謝謝。 – chatu

0

我不明白你爲什麼要創建一組只包含一個鍵值對的對象。 爲什麼不使用數組作爲文件名?

var arrFileNames = ["file0Name","file1Name","file2Name"...]; 
for(...) { 
    name = arrFileNames[i]; 
} 

,或者縮短東西(因爲有一個名字變量不實際需要):

$("#someContainer").append('<li class="file" id="file' + i + '">' + arrFileNames[i] + '</li');