Как я могу найти последнего дочернего элемента в списке массивов, например дерево

#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