2013-12-21 37 views
1

我不明白如何在Javascript中找到子數組的長度。下面是一個鍛鍊的例子:在Javascript中打印出子數組的元素

var table = [ 
["Person", "Age", "City"], 
["Sue",  22,  "San Francisco"], 
["Joe",  45,  "Halifax"] 
]; 

我試圖打印出來單獨使用這些for循環的子數組的元素:

for(person in table) { 
    for(var i = 0; i < table[person].length; i++); 
     console.log(table[person][i]); 
} 

但似乎

table[person].length 

無效語法雖然

table.length 

是有效的,

table[person][i] 

各分項指數table_person_i

+0

我可以向你保證'table [person] .length'是有效的語法。爲什麼用'for ... in'循環遍歷數組?使用'for'循環可能會解決您的問題。 –

+0

在迭代數組時,我更喜歡for ...的語法。我在Codecademy上做了一個練習,它拒絕了我的語法。它給每個行'未定義'。也許這是他們翻譯的問題? –

+1

如果在名爲table的對象中有一個名爲person的數組,那麼table [person] .length將是有效的。但那不是你擁有的結構 - 上面描述的結構是對數組的誤解,或者至少是一種使用它們的奇怪方式。 – JAL

回答

1

這是一個數組,而不是一個對象,所以你不能在循環使用爲/。取而代之,請使用常規代替循環。

//for (person in table) { 

for (var person = 1; person < table.length; person++) { 
    for(var i = 0; i < table[person].length; i++) 
    { 
     console.log(table[person][i]); 
    } 
} 
+0

這不是100%正確的。你*可以*使用for ... in循環(畢竟,數組也是對象),但你*不應該*。 –

1

你應該使用嵌套for循環完成這個任務,在返回元素:

for (var i = 0; i < table.length; i++) { 
    for (var j = 0; j < table[i].length; j++) { 
     console.log(table[i][j]); 
    } 
} 
+0

謝謝。這是有效的,但有沒有辦法用for(數組中的鍵){for(i = 0; t

+1

'for for循環應該通常使用當迭代對象鍵時,因此'for key in'名稱 – tymeJV

0

在你的榜樣,你的陣列是一個數組的數組。 要提取人的姓名,並根據您的例子:

for (var i = 1; i < table.length; i++) 
{ 
console.log(table[i][0]); // first element of each sub array 
} 
+0

唯一的問題是沒有內部for循環來打印子數組 –

1

試試這個:

for (var j = 0; j<table.length; j++) 
{ 
    //j(th) element of table array 
    for (var i = 0; i < table[j].length; i++) 
    { 
     //i(th) element of j(th) element array 
     console.log(table[j][i]); 
    } 
} 
+0

的其他元素,謝謝。這有效,但是有沒有辦法用for(key in array){for(i = 0; t

+1

只能使用數字索引訪問數組元素。你可以使用帶有js'objects'的鍵。 [這裏是一個例子](http://stackoverflow.com/questions/18804592/javascript-foreach-loop-on-associative-array-object) – Kaf

+0

@ChrisOchsenreither你應該避免在數組中使用for-in,這會釋放惡魔......和不可靠的數據(即迭代你不期待的數組對象的其他屬性)。 – Lior