Не используется рекурсия:
var tree =[McDuffFamily];
var kids = [];
for (i=0; i < tree.length; i++) {
tree[i] && tree.push.apply(tree, tree[i].childrens)
kids.push(tree[i]);
}
kids; // all children
Разбивка странной части:
tree[i] && tree.push.apply(tree, tree[i].childrens);
tree[i] &&
используется с оценкой короткого замыкания , гарантирующей, что tree[i]
не является нулевым, когда я звоню tree[i].children
tree.push.apply(tree, tree[i].childrens);
с использованием применить , что позволяет мне вызывать функцию, в данном случае Array.push , которая принимает любое количество аргументов на tree
. Так что эта строка в основном становится tree.push(child0, child1, ... childn);
.
, поэтому теперь tree.length
увеличено на число детей текущего ребенка.