Показать сообщение отдельно
  #5 (permalink)  
Старый 28.07.2014, 11:25
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Да. На первом шаге итерации Mammals добавляется в itemsById. В itemsById ищется родитель для Mammals, но т.к. в itemsById пока что есть только Mammals, а элемента с id == 0 вообще нет в исходном наборе, то срабатывает else и Mammals попадает в result. На втором шаге все повторяется до проверки. Для Dogs в itemsById находится родитель — это Mammals. Далее в Mammals.children пушится Dogs. Цикл повторяется.

Объекты в js передаются только по ссылке. И когда в цикле в первый раз делается itemsById[item[parentid]][children].push(item), это эквивалентно result[0][children].push(item), потому что и result[0] и itemsById[item[parentid]] ссылаются на Mammals.
Ответить с цитированием