#javascript #reactjs #sorting #tree
#javascript #reactjs #сортировка #дерево
Вопрос:
Привет, у меня есть динамические данные дерева, как показано ниже, содержащие дочерние элементы, могут увеличивать подобные узлы tree8, tree9 и дочерние элементы как я могу найти имя узла, у которого был последний дочерний элемент, и все идентификаторы, как я уже сказал, эта древовидная структура может продолжаться динамически. ответьте на приведенный ниже пример с именем последнего дочернего узла tree4, и все дерево = [«1″,»2″,»3″,»4″,»5″,»6″,»7»] Важным моментом здесь является то, что я не могу найти, как это сделать, когда динамическийданные поступают, спасибо за предложение
let tree = {
id: 1,
name: "tree1",
children: [
{
id: 2,
name: "tree2",
children: [
{
id: 4,
name: "tree4",
children: [
{
id: 6,
name: "tree6"
},
{
id: 7,
name: "tree7"
}
]
},
{
id: 5,
name: "tree5"
}
]
},
{
id: 3,
name: "tree3"
}
]
};
Комментарии:
1. Каков ожидаемый результат, если у tree6 и tree7 есть дочерние элементы?
2. это может быть только чей-то дочерний элемент, например, у tree7 есть дочерние элементы, я ожидал, что результатом будет tree7 и все имена идентификаторов
Ответ №1:
Вы можете использовать рекурсивную функцию
// Based on your question and solution , I can see that you want to check only children[0] object for children.
let noChildParent;
let id = [];
let checkIfChildrenExist = (prop,parentName) =>{
//console.log(prop,noChildrenParent);
if(prop.children == null)
{
noChildParent = parentName;
return
}
checkIfChildrenExist(prop.children[0],prop.name); \ recursive pattern
}
let checkId = (prop)=>{
//console.log(prop.id);
id.push(prop.id);
if(prop.children == null) return;
prop.children.forEach((el)=>{
checkId(el);
});
}
checkIfChildrenExist(tree);
checkId(tree);
console.log("noChildParent",noChildParent, "ID",id); // tree4 // [1, 2, 4, 6, 7, 5, 3]
//You can sort id array if you want it to be in specific order