Найти родительский элемент массива по id его дочернего элемента
У меня есть JS-массив, имеющий следующий вид:
const arr = [
{
i: "tooltip_119",
children: [
{
i: "text_345",
children: []
},
{
i: "wraper_375",
children: [
{
i: "grid_15",
children: []
}
]
}
]
},
{
i: "chart_123",
children: []
},
{
i: "graph_467",
children: []
},
]
Идея заключается в том, что у такого массива количество вложенностей потенциально может быть бесконечным. И мне нужна функция, которая, принимая параметр i
какого-либо элемента, вернет параметр i
его родителя (или 0, если элемент находится в корне и родителей не имеет). Пример работы такой функции:
console.log(findParent(arr, "grid_15")) // returns "wraper_375"
Я написал такую функцию:
export function findParent(arr, i) { // this func has a bug on deep levels
for (let j = 0; j < arr.length; j++) {
const element = arr[j];
if (element.children && element.children.length > 0) {
const childElement = element.children.find((e) => e.i === i);
if (childElement) {
return element.i;
} else {
const parentElement = findParent(element.children, i);
if (parentElement) {
return parentElement.i;
}
}
}
}
return 0;
}
Проблема в том, что моя функция не работает на более глубоких уровнях вложенности. Буду благодарен за помощь
Источник: Stack Overflow на русском