Этот фрагмент кода преобразует ваши входные данные в дерево
var lines =
('1, cars, 0\n' +
'2, boats, 0\n' +
'3, oldtimer, 1\n' +
'4, trucks, 1\n' +
'5, heavytrucks, 4').split('\n');
var tree = [];
var lookup = {}; // temporary variable
for (var i in lines) {
var items = lines[i].split(', ');
var obj = { id: items[0], parent_id: items[2], name: items[1], children: [] };
lookup[obj.id] = obj;
if (lookup[obj.parent_id]) {
lookup[obj.parent_id].children.push(obj);
} else {
tree.push(obj);
}
}
console.log(tree); // will display your tree
Затем вы можете пройтись по своему дереву и изменить его так, как вы хотите, чтобы он выглядел.
Например, это будетраспечатайте его
function walk(root, depth) {
var s = ""; for (var i = 0; i < depth; i++) s += '-';
console.log(s + ' ' + root.name);
for (var child in root.children) {
walk(root.children[child], depth+1);
}
}
for (var child in tree)
walk(tree[child], 1);
вот так
- cars
-- oldtimer
-- trucks
--- heavytrucks
- boats
Аналогичным образом вы можете преобразовать его во что угодно.
function walk2(root, parent) {
if (root.children.length == 0) {
parent[root.name] = root.id;
} else {
parent[root.name] = {}
for (var child in root.children) {
walk2(root.children[child], parent[root.name]);
}
}
}
var tree2 = {};
for (var child in tree)
walk2(tree[child], tree2);
console.log(tree2); // <- is this what you wanted?