2012-01-04 87 views
0

我試圖創建一個for循環,做同樣的事情,因爲這代碼(任務是數組):for循環轉換一系列變量

Quest0.text = quests[0] 
Quest1.text = quests[1] 
Quest2.text = quests[2] 
Quest3.text = quests[3] 
Quest4.text = quests[4] 
Quest5.text = quests[5] 
Quest6.text = quests[6] 
Quest7.text = quests[7] 
Quest8.text = quests[8] 
Quest9.text = quests[9] 
Quest10.text = quests[10] 
Quest11.text = quests[11] 
Quest12.text = quests[12] 
Quest13.text = quests[13] 
Quest14.text = quests[14] 
Quest15.text = quests[15] 

到目前爲止,我的一切是這(activeQuests是陣列任務的長度):

var q = 0; 
for (q=0; q <= activeQuests; q++) { 
    Quest0.text = quests[q] 
} 

但我不知道如何得到它做休息。

回答

3

你可以使用eval但你可能不應該。你應該重新考慮一下你的方法,如果你有這樣明顯的類似數組的數據,那麼你就是按照元素手動操作的。

看看這個博客文章從Marco van Hylckama Vlieg:"Variable Variables in Javascript"。相關代碼片段:

...使用全部全局變量保存在窗口 數組中的事實。

var i=1; 
window['name' + i] = 'Marco'; 
document.write('got ' + name1); 

我們走吧!尼斯,乾淨無的eval()必要的。」

+0

可能要添加一個參考.. http://www.i-marco.nl/weblog/archive/2007/06/14/variable_variables_in_javascri – amosrivera 2012-01-04 08:23:01

+0

@amosrivera:謝謝,補充說我的答案。 – bobbymcr 2012-01-04 08:44:31

0

我想你最好保持‘任務’陣列不是定義不同的變量,每個索引。

但是,如果要循環嘗試eval("Quest" + q + ".text = quests[q]")在循環。

1

我們就需要了解更多的給你確切的代碼,但爲了應對字符串的變量,它需要一個對象的屬性。例如

window.example = 'hello world'; 
alert(window['example']); 

所以 真的取決於你的QuestN變量是什麼。他們是否爲<input>元素的ID?他們是全球變數嗎?它們是否在本地範圍內使用var關鍵字定義?

1

如果你可以改變如何Quest..定義,然後將它們定義爲一個數組,所以你可以這樣做:

Quest[q].text = quests[q]; 

,如果你不能那麼暫時創建Quest..對象的數組:

var QUESTS = []; 
QUESTS[0] = Quest0; 
QUESTS[1] = Quest1; 
QUESTS[2] = Quest2; 
QUESTS[3] = Quest3; 
QUESTS[4] = Quest4; 
QUESTS[5] = Quest5; 
QUESTS[6] = Quest6; 
QUESTS[7] = Quest7; 
QUESTS[8] = Quest8; 
QUESTS[9] = Quest9; 
QUESTS[10] = Quest10; 
QUESTS[11] = Quest11; 
QUESTS[12] = Quest12; 
QUESTS[13] = Quest13; 
QUESTS[14] = Quest14; 
QUESTS[15] = Quest15; 

然後你可以這樣做:

for (var q=0; q<=activeQuests; q++) { 
    QUESTS[q].text = quests[q] 
} 

顯然這是一個醜陋的解決方案,但遠遠好於eval恕我直言。