Я пишу код, в котором у меня есть вложенное генеалогическое древо, и я хочу создать массив JSON с тем же. В настоящее время я могу получить родительское значение во вновь созданном JSON, но я ищу способ получить идентификатор предка.
Вот мой код. Введите код здесь
const myObj = {
id: 1,
children: [
{
id: 2,
children: [
{
id: 3,
},
],
},
{
id: 4,
children: [
{
id: 5,
children: [
{
id: 6,
children: [
{
id: 7,
},
],
},
],
},
],
},
],
};
idArray = [];
function func(obj, parent) {
idArray.push({
id: obj.id,
name: `${obj.id} ${parent ? `child of ${parent}` : ""}`,
parentId: parent
});
if (!obj.children) {
return;
}
obj.children.forEach((child) => func(child, obj.id));
}
func(myObj);
console.info(idArray);Здесь под parent Я хочу новый ключ grandparent, который показывает идентификатор дедушки и бабушки. Пожалуйста, дайте мне знать, как я могу это получить. А также есть ли способ получить результат без использования глобальной переменной, просто перебирая данные и возвращая окончательный массив? как console.info(JSON.stringify(func(myObj))).
Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как правило, если вы хотите отслеживать более одного предка, B-Tree — идеальный способ управления этим. Гораздо проще найти родителя любого узла на любом уровне.
Вот ресурс, где вы можете узнать больше о B-деревьях. Построение B-дерева в JavaScript
Вы должны проверять и оперировать каждого ребенка на ребенка. Если у ребенка есть дети, то вы должны вспомнить ту же функцию.
См. функцию «поиск» ниже.
const myObj = {
id: 1,
name: '11',
children: [...]
};
const finder = function (child, tempArray, parentId = 0){
tempArray.push({id:child.id, name: child.name, parentId });
if (child.children)
{
child.children.forEach(grandChild => finder(grandChild,tempArray,child.id)); // here is trick
}
}
const fixer = function(firstObject){
let idArray = [];
finder(firstObject,idArray);
return idArray;
}
const newArray = fixer(myObj);
console.info(newArray);
выход
[
{ id: 1, name: '11', parentId: 0 },
{ id: 2, name: '22', parentId: 1 },
{ id: 3, name: '33', parentId: 2 },
{ id: 4, name: '44', parentId: 1 },
{ id: 5, name: '55', parentId: 4 },
{ id: 6, name: '66', parentId: 5 },
{ id: 7, name: '77', parentId: 6 }
]
Пожалуйста, добавьте желаемый результат.