2013-12-21 2 views
1

Я не понимаю, как найти длину подмассива в Javascript. Вот пример из упражнения:распечатать элементы подматрицы в Javascript

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

Я попытался распечатать элементов подмассивов индивидуально, используя их для петель:

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

Я предпочитаю синтаксис ... для синтаксиса при повторении массивов. Я выполняю упражнение на Codecademy, и это отклоняет мой синтаксис. Это дает «неопределенный» для каждой строки. Может быть, это проблема с их переводчиком? –

+1

Таблица [person] .length была бы действительна, если бы у вас был массив с именем person в объекте, называемом table. Но это не та структура, которую у вас есть - описанная выше структура - это некое недопонимание массивов или, по крайней мере, странный способ их использования. – 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 (key in array) {for (i = 0; t

+1

'for in' loops обычно должны использоваться при итерации по клавишам объектов, следовательно, 'for key in 'name – tymeJV

0

В вашем примере, ваш массив является массив массива. Чтобы извлечь имена людей, а по вашему примеру:

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

Единственная проблема заключается в том, что нет внутреннего цикла для печати других элементов подмассива –

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 Вы действительно должны избегать использования in-on на массивах, которые будут развязывать демонов ... и ненадежных данных (т. е. итерации по другим свойствам объекта массива, которого вы не ожидаете). – Lior

Смежные вопросы