пост старый - но интересный
вдруг кому пригодится
вот
более быстрое решение чем у
Дмитрий. в первом ответе
можно добавить в тесты из первого ответа от
Дмитрий -
будете приятно удивлены
function test4( list ) {
var map = {}, node, roots = [], i;
for (i = 0; i < list.length; i += 1) {
map[list[i].id] = i;
list[i].children = [];
}
for (i = 0; i < list.length; i += 1) {
node = list[i];
if (node.parent) {
list[map[node.parent]].children.push(node);
} else {
roots.push(node);
}
}
return roots;
}
вот тут добавлен этот вариант
https://jsfiddle.net/zteogkuL/
------------------------
Размер:
1000, повторить:100 раз
Somewhere Intech: 563.821044921875 ms
Bavashi: 614.713134765625 ms
Дмитрий:
241.9619140625 ms
--fast--:
3.85009765625 ms
------------------------
Размер:
2000, повторить:50 раз
Somewhere Intech: 1106.697021484375 ms
Bavashi: 1223.849853515625 ms
Дмитрий:
154.4228515625 ms
--fast--:
3.881103515625 ms
------------------------
Размер:
5000, повторить:20 раз
Somewhere Intech: 2736.092041015625 ms
Bavashi: 3024.505859375 ms
Дмитрий:
120.299072265625 ms
--fast--:
4.150146484375 ms
------------------------