Как найти первого предка в плоском массиве элементов рекурсивно?
Алгоритм поиска представляет из себя рекурсию, которая проверяет существует ли элемент, если существует то ищет дальше, если нет то возвращает результат.
const tasks = [
{ id: 1, parent: -1, value: 'Make breakfast' },
{ id: 2, parent: 1, value: 'Brew coffee' },
{ id: 3, parent: 2, value: 'Boil water' },
{ id: 4, parent: 3, value: 'Grind coffee beans' },
{ id: 5, parent: 4, value: 'Pour water over coffee grounds' }
];
function findNode (id) {
return tasks.filter(function(item) {
if (item.id === id) {
return item
}
})[0]
}
function findParent (id) {
const parent = findNode(id);
if (typeof parent !== 'undefined') {
findParent(parent.parent);
} else {
return id;
}
}
console.log(findParent(4))
проблема заключается в том, что на условии typeof parent !== 'undefined' рекурсия срабатывает лишний раз, хотя parent является undefined
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
Если Вам нужен первый (ближайший?) родитель, то зачем здесь рекурсия?
Ошибка в пропущеном return перед рекурсивным вызовом findParent(parent.parent);.
И findNode возвращает не parent, a item.
const tasks = [
{ id: 1, parent: -1, value: 'Make breakfast' },
{ id: 2, parent: 1, value: 'Brew coffee' },
{ id: 3, parent: 2, value: 'Boil water' },
{ id: 4, parent: 3, value: 'Grind coffee beans' },
{ id: 5, parent: 4, value: 'Pour water over coffee grounds' }
];
function findNode (id) {
return tasks.filter(item => item.id === id)[0];
}
function findParent (id) {
const node = findNode(id);
if (typeof node !== 'undefined' && node.parent != -1) {
return findParent(node.parent);
}
return id;
}
console.log(findParent(4))