2016-01-27 2 views
0

, поэтому я пытаюсь сделать одну из самых простых вещей, и мне интересно, что случилось с моим подходом.Длина пустого массива в javascript

У меня есть объект, содержащего номер

{ rooms: 
    { ijxeczyu: 
     { Id: 'ijxeczyu', 
     teacherName: 'testteacher', 
     teacherId: '/#Ikosyfr1NtDcpKbaAAAA', 
     clients: [] } }, 
    getRooms: [Function], 
    addRoom: [Function] } 

теперь я хочу, чтобы сделать их данные в таблицу в нефрите. для того, чтобы работать, я хочу, чтобы извлечь важные вещи и толкать его в массив

function makeArray(obj) { 

    var roomArray = []; 

    for (var room in obj) { 
    roomArray.push({ 
     roomId : room.Id, 
     teacher : room.teacherName, 
     clients : room.clients.length || 0 
    }) 
    } 
    return roomArray; 
} 

довольно легко. но Я не могу получить этот пустой массив клиентов для работы. TypeError: Cannot read property 'length' of undefined Это не то, что должно было уловить часть || 0?

Почему это не работает? как я могу прочитать длину массива или 0, если нет записей?

+2

Предполагая, что вы имеете в виду, что room.clients не определено, тогда '|| 0' слишком поздно. Вместо этого вы можете сделать: '(room.clients || []). Length' –

ответ

4

room.clients - undefined, поэтому вы получаете эту ошибку. Причина в том, что это undefined, потому что room - это строка.

A for..in loop Итерации по клавишам объекта. Это означает, что room === "ijxeczyu", предполагая, что вы передаете свой объект rooms. Чтобы получить доступ к объекту, вам необходимо получить доступ к объекту по этому ключу.

for (var name in obj) { 
    var room = obj[name]; 
    ... 
} 
+0

aaaaahhhh ok. теперь это имеет смысл. так что в принципе, цикл for..in в значительной степени не является преимуществом по сравнению с стандартом для цикла? – user3787706

+0

@ user3787706 Преимущество состоит в том, что вы можете использовать его для итерации по клавишам объекта. Стандартный цикл 'for' предназначен для итерации по массивам. 'for (var key in obj)' vs. 'for (var i = 0; i

+0

Экзаменск 7 добавляет 'для значения объекта', который итерации над значениями вместо ключей. – Barmar

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