Как найти все индексы путей по рекурсивному массиву?
Имеется нижепредставленный массив. Очевидно, что groups могут добавляться и убираться в любом месте. Хочу вывести все пути, пройденные по "веткам" до каждого последнего (пустого) groups.
Делаю это так:
const data = {
"groups": [{
"id": 1,
"name": "name",
"groups": [
{
"id": 2,
"name": "name",
"groups": [
{
"id": 3,
"name": "name",
"groups": []
},
{
"id": 4,
"name": "name",
"groups": []
}
]},
{
"id": 5,
"name": "name",
"groups": []
}
]
},
{
"id": 6,
"name": "name",
"groups": []
}]
};
let rootsRoute =[], rootsKeys = [];
function rootsCollector(groupsData) {
for (i = 0; groupsData.length > i; i++) {
if (groupsData[i].groups.length === undefined) {
return
} else {
if(!groupsData[i].groups.length) {
rootsKeys.push(i);
rootsRoute.push(rootsKeys);
rootsKeys = [];
return
} else {
rootsKeys.push(i);
groupsData = groupsData[i].groups;
rootsCollector(groupsData);
}
}
}
}
groupsData = data.groups;
rootsCollector(groupsData);
console.log(rootsRoute);
Выводит, только два из четырех маршрута. Получается, что рекурсия не входит во все дочерние элементы первого элемента. Где я ошибся? Как это сделать правильно?
Ответы (1 шт):
Автор решения: Redither
→ Ссылка
Решено было так:
function rootsCollector(groupsData, rootsKeys=[]) {
for (let i = 0; i<groupsData.length; i++) {
if (groupsData[i].groups.length === undefined) {
return
} else {
let route = [...rootsKeys, i];
if(!groupsData[i].groups.length)
rootsRoute.push(route);
else
rootsCollector(groupsData[i].groups, route);
}
}
}
rootsCollector(data.groups);
console.log(rootsRoute);