2016-05-07 4 views
-5

Может ли кто-нибудь объяснить мне вторую строчку? Почему без этого это не будет работать правильно?Что означает этот код? JavaScript

dataStuff.forEach(function (a) { 
    grouped[a.Tag] = grouped[a.Tag] || []; 
    grouped[a.Tag].push(a); 
}); 
+1

Попробуйте объяснить, что 'сгруппировано [a.Tag] .push (a);' делает сначала. Ваш ответ основывается на вашем понимании этой самой линии. – zerkms

+0

Что будет работать неправильно? Каков вход и ожидаемый результат? Вопрос очень неясен. – freakish

ответ

1
dataStuff.forEach(function (a) { 
    grouped[a.Tag] = grouped[a.Tag] || []; //if grouped[a.Tag] array is undefined make it an array 
    grouped[a.Tag].push(a);    //try to push into array. 
}); 

Объясняя свой код.

Линия

grouped[a.Tag].push(a); предполагается push значений а в массив grouped[a.Tag]. Если это не так, то grouped[a.Tag] массив не определен, вы получите сообщение об ошибке grouped[a.Tag] is undefined. Поэтому для решения этой проблемы эта линия

grouped[a.Tag] = grouped[a.Tag] || []; используется.

Здесь grouped[a.Tag] || [] если вообще grouped[a.Tag] не определен ваша выше строка будет эквивалентен

grouped[a.Tag] = []; То есть создать новый массив.

Else, если grouped[a.Tag] определено, тогда вам не нужно ничего делать, поэтому просто назначьте его самому себе.

Итак, идея состоит в том, что grouped[a.Tag] не определено, а затем создайте новый массив, иначе ничего не сделайте, поскольку вам хорошо идти.