function objectGraph(items)
{
var items_by_id = {};
var roots = [];
var i;
// Build an id->object mapping, so we don't have to go hunting for parents
for (i = 0; i < items.length; ++i) {
items_by_id[items[i].itemId] = items[i];
items[i].children = [];
}
for (i = 0; i < items.length; ++i) {
var parentId = items[i].parentItemId;
// If parentId is null, this is a root; otherwise, it's parentId's kid
var nodes = (parentId === null) ? roots : items_by_id[parentId].children;
nodes.push(items[i]);
}
return roots;
}
Примечание Этот код дает каждому узлу children
свойство, что пусто, если узел не имеет детей. Я лично считаю его более простым и последовательным, чем каждый узел, возможно, или, может быть, не имея детей; вы можете перебрать children
, не беспокоясь о том, существует ли он. У листового узла будет children.length == 0
.
Если вы можете гарантировать, что у вас есть ровно один корень, вы можете return roots[0];
вместо возврата массива.
вы можете попробовать плагин, как http://www.jqplot.com/ –
Привет, Иосиф, интересный проект! но я не имел в виду диаграмму/график .. просто вложенный объект «graph» .. –