2015-06-03 135 views
0

我有多個陣列,像這樣:for循環打印出多個陣列具有類似名稱

bugNames0 = ["wasp", "roach", "stinkbug", "mantis"]; 
bugNames1 = ["hornet", "beetle", "ant", "termite"]; 
bugNames2 = ["gnat", "fly", "grub", "chigger"]; 
bugNames3 = ["flea", "bed-bug","maggots", "cricket"]; 

接下來我有這樣的循環:

function bugLoop() { 
for (var i=0; i < 4 ; i++){ 
    console.log(bugNames0[i]); 
    } 
} 

能夠成功打印第一個數組到控制檯,或者每個人如果手動更新數組名稱中的數字。

但是,有沒有辦法做更多的東西一樣嗎?這下面的代碼位不工作,但我希望它解釋了什麼是我想要做的事:

for (var i=0, j=0; i < 4; i++) { 
    console.log(bugNames(i)[j]); 
    } 
} 

在這裏,我代表bugName#,我想打通0更新 - 3作爲循環運行,僅打印出由j表示的每個數組的第一個選項。

目標結果打印到控制檯是:

"wasp", "hornet", "gnat", "flea" 

或者類似的東西。

如果可能的話,我想只能用香草JS,因爲我工作的一個項目(自主分配運動),我試着用香草來完成它的解決方案。有種武力讓自己瞭解語言更好的鍛鍊。

(另外,我只編碼4個月,很抱歉,如果這是一個小白問題,我無法找到答案隨時隨地在線,只是很多循環的正常進行打印輸出陣列。)

回答

1

你可以存儲所有四個陣列成一個較大的陣列(每bugNames陣列將僅僅是這個更大的陣列中的元素)。讓我們把它叫做bugCollection

bugCollection = [["wasp", "roach", "stinkbug", "mantis"], ["hornet", "beetle", "ant", "termite"], ["gnat", "fly", "grub", "chigger"], ["flea", "bed-bug","maggots", "cricket"]] 

或者,你可以把這些陣列的變量存儲,並說:

bugCollection = [bugNames0, bugNames1, bugNames2, bugNames3]

然後,你可以通過較大的陣列迭代,註銷在每個目錄。

var oneFromEachArray = function(index) { 
    for (var i = 0; i < bugCollection.length; i++) { 
     console.log(bugCollection[i][index]); 
    } 
} 

oneFromEachArray(0) // Console logs 'wasp', 'hornet', 'gnat', 'flea' 
+0

我花了一點認識到,你和AnthonyDJ基本上推薦同樣的事情。但是,您深入解釋了它。感謝你這樣做,我很欣賞它(並且需要它完全包裹我的頭)。 – Genko

+0

很高興聽到你發現它的價值! –

2

如果你可以在一個陣列中存儲你的陣列,這將是一個更好的選擇。

例如:

bugNames[0] = ["wasp", "roach", "stinkbug", "mantis"]; 
bugNames[1] = ["hornet", "beetle", "ant", "termite"]; 
bugNames[2] = ["gnat", "fly", "grub", "chigger"]; 
bugNames[3] = ["flea", "bed-bug","maggots", "cricket"]; 

然後你可以遍歷數組bugNames正常。

+0

這其實效果很好。你和rkho都展示了在數組中粘貼數組的兩種不同方式。他深入瞭解該函數的工作方式,但這種組織數組的方式看起來非常乾淨。這絕對是我從現在開始使用的一種習慣! (我要紀念他的答案在這裏,因爲完整的解釋。我想,因爲這是一個初學者的問題,這將是件好事,那萬一別人遇到這個線程。) – Genko

+0

聽起來很棒,很高興你解決了它! – AnthonyDJ

1

你可以嘗試的eval

for (var j=0; j < 4 ; j++){ 
    for (var i=0; i < 4 ; i++){ 
     eval("console.log(bugNames" + j + "[i]);"); 
    } 
} 
+0

我確實有一些問題得到這個工作,但我想我會更晚一些玩得到的eval想通了。欣賞建議。 – Genko

1

您可以使用函數eval()這樣的:

for (var i=0, j=0; i < 4; i++) { 
    console.log(eval('bugNames' + i)[j]); 
} 

但是你已經考慮利用數組的數組?也許這將是一個更清晰的方式來實現同樣的事情。

+0

我實際使用數組的數組沒有考慮過,但一對夫婦的其他人的建議是,我現在就可以讀了。我一直在努力養成一種學習乾淨編碼的習慣,並且認爲最好是讓自己的目標是從頭開始,而不是稍後改變習慣。感謝您花時間回答! – Genko

1

您可以使用窗口對象隨時訪問自己的變量。請使用以下代碼動態訪問您的變量。

for (var i=0, j=0; i < 4; i++) { 
    console.log(window["bugNames"+i][j]); 

} 
+0

這實際上工作得很好,我將保存這個以備將來使用。謝謝! – Genko

+1

當你有JSON對象有動態鍵時,這種方法特別有用。 var users = {user1:{name:「Punit」},user1:{name:「Genko」}}。您無法使用用戶訪問它。「user」+1。但是你可以像用戶[「user」+1]那樣訪問它。 –

+0

當我使用帶有動態密鑰的JSON對象時,我一定會使用它。真的很感謝建議:) – Genko