Я пытаюсь создать URL-адреса для страниц, хранящихся в MongoDB в узле.Обход дерева в javascript
Используя следующую функцию, я хочу пройти объект javascript и отобразить путь к каждому элементу.
Я почти там, но я застрял - может быть, даже лучший способ сделать это, используя Async (что я должен признать, меня немного смущает).
Функция: (demo)
function printTree(people, slug) {
for (var p = 0; p < people.length; p++) {
var root = people[p];
slug = slug + root.name + "/";
console.log(slug);
if (root.children.length > 0) {
var childrenCount = root.children.length;
for (var c = 0; c < childrenCount; c++) {
if (root.children[c].children.length > 0) {
printTree(root.children[c].children, slug + root.children[c].name + "/");
}
}
}
}
};
Выход:
/michael/
/michael/angela/oscar
/michael/meredith/creed
/michael/meredith/creed/kelly
Ожидаемый результат:
/michael/
/michael/angela/
/michael/angela/oscar/
/michael/meredith/
/michael/meredith/creed/
/michael/meredith/kelly/
Объект:
[
{
"name": "michael",
...
"children": [
{
"name": "angela",
...
"children": [
{
"name": "oscar",
...
"children": []
}
]
},
{
"name": "meredith",
...
"children": [
{
"name": "creed",
...
"children": []
},
{
"name": "kelly",
...
"children": []
}
]
},
{ ... }
]
}
]
Если это поможет, то данные сохраняются с помощью вложенных наборов: https://github.com/groupdock/mongoose-nested-set Так что может быть лучше сделать выше работу, используя вложенные наборы (отрицающие вышеупомянутую объекта).
Вы абсолютно прибил его! http://jsfiddle.net/cT8wn/2/ –
Привет, это работает для майкла, ангелы и оскара, но как только дерево попадает к другим детям Майкла, он ломается. [см. демонстрацию] (http://jsfiddle.net/WHZUE/) meredith является братом ангелы, но на выходе появляется меридит как ребенок ангелы. – logikal
Это из-за этой строки: 'slug = slug + people [i] .name + '/';' исправлено это для вас –