я пытаюсь сделать дерево с путем для каждого узла:
Plunkr реальной демонстрации (см. только консоль): https://plnkr.co/edit/peCIZcSzChF3b2WnaOxk?p=preview
исходные данные: (это список тегов, «родительский» - это родительский идентификатор)
var originals=[
{"id":1,"name":"Grammaire","parent":null},
{"id":2,"name":"Orthographe","parent":null},
{"id":8,"name":"Orthographe lexicale","parent":2},
{"id":9,"name":"Orthographe grammaticale","parent":2},
{"id":10,"name":"Adjectif couleur","parent":9},
{"id":11,"name":"Nombre","parent":8},
{"id":12,"name":"Annalyse grammaticale","parent":1},
{"id":19,"name":"Concordance des temps","parent":1},
{"id":20,"name":"annalyse 2","parent":12}
];
Таким образом, должно получиться такое дерево:
1-Grammaire
12-Annalyse grammaticale
20-Annalyse 2
19-Concordance des temps
2-Orthographe
8-Orthographe lexicale
9-Orthographe grammaticale
10-Adjectif couleur
11-Nombre
Я получаю код, который делает это:
function convert(array){
var map = {};
for(var i = 0; i < array.length; i++){
var obj = array[i];
obj["children"] = [];
map[obj.id] = obj;
var parent = obj.parent || '-';
if(!map[parent]){
map[parent] = {
children: []
};
}
map[parent].children.push(obj);
}
return map['-'].children;
}
И результат:
[
{"id":1,"name":"Grammaire","parent":null,
"children":[
{"id":12,"name":"Annalyse grammaticale","parent":1,
"children":[{"id":20,"name":"annalyse 2","parent":12,"children":[]}]
},
{"id":19,"name":"Concordance des temps","parent":1,"children":[]}
]},
{"id":2,"name":"Orthographe","parent":null,
"children":[
{"id":8,"name":"Orthographe lexicale","parent":2,
"children":[
{"id":11,"name":"Nombre","parent":8,"children":[]}]
},
{"id":9,"name":"Orthographe grammaticale","parent":2,
"children":[{"id":10,"name":"Adjectif couleur","parent":9,"children":[]}]
}
]
}
]
ПРОБЛЕМА!
например для узла с id = 20
{"id":20,"name":"annalyse 2","parent":12,"children":[]}
Мне нужно получить для этого узла идентификатор и имя родительского узла следующим образом:
{"id":20,"name":"annalyse 2","parent":12,"children":[]
"parentNodes"= [{"id":1,"name":"Grammaire"},{"id":12,"name":"Annalyse grammaticale"},{"id":20,"name":"annalyse 2"}]
}
Я не хочу циклического решения, потому что я уже сделал его и делаю ошибку в своем коде, потому что мне нужно клонировать этот объект.
Любая помощь приветствуется, я знаю, что мне нужно сделать рекурсивную функцию, которая добавит «путь», но до сих пор я терплю неудачу, спасибо