Проблема с построением дерева рекурсивно
Пытаюсь написать функцию для создания дерева из массива данных, но что-то идет не так. Может кто-то подскажет правильный подход?
Исходные данные:
[
{ name: 'x', kids: ['y', 'z'] },
{ name: 'y', kids: [''] },
{ name: 'z', kids: ['y', 'w'] },
{ name: 'w', kids: ['y'] }
]
Ожидаемый результат:
x
/|\
y z
/|\
y w
|
y
Мой код (не работает):
var TreeNode = require("tree-node");
var dataArray = [
{ name: 'x', kids: ['y', 'z'] },
{ name: 'y', kids: [''] },
{ name: 'z', kids: ['y', 'w'] },
{ name: 'w', kids: ['y'] }
];
function buildTreeRecursive(currentNode) {
var newNode = new TreeNode();
var nodeKids = currentNode.data("kids");
dataArray.forEach(function(element) {
if(nodeKids !== undefined) {
nodeKids.forEach(function(kidName) {
if(element.name == kidName) {
newNode.data("name", kidName).data("kids", element.kids);
newNode = buildTreeRecursive(newNode);
currentNode.appendChild(newNode);
}
});
}
});
return currentNode;
}
var mainRoot = new TreeNode();
mainRoot.data("name", dataArray[0].name).data("kids", dataArray[0].kids);
mainRoot = buildTreeRecursive(mainRoot);
Проблема в том, что получается слишком сложный алгоритм из-за вложенных циклов. Как это можно упростить?