Как обновить объект JavaScript вложенным массивом и объектами под n уровнями?

#javascript #tree #nested

#javascript #дерево #вложенный

Вопрос:

Следуя приведенному ниже дереву

       let dumbTree = {
        name: "vob",
        uuid: "edbf146d-c9ee-4568-8c1e-a095f8ad4aff",
        children: [
          {

            name: "A0A",
            uuid: "8655460b-4862-4d11-800a-870482f4701b",
            nodeType: "project",
            children: []
          },
          {
            name: "A1A",
            uuid: "8655460b-4862-4d11-800a-870482f4701b",
            nodeType: "project",
            children: []
          }
        ]
      }
  

Я хотел бы постепенно преобразовать path в структуру того же типа.
В этом примере у меня есть путь /vob/A0A , и /vob/A1A , а затем, если я нажму на лист A1A , это даст мне массив, как из вызова API:

['/vob/A1A/A1A111', '/vob/A1A/A1A112', '/vob/A1A/A1A113'] , поэтому я хотел бы соответствующим образом заполнить дерево

   dumbTree = {
    name: "vob",
    uuid: "edbf146d-c9ee-4568-8c1e-a095f8ad4aff",
    children: [
      {

        name: "A0A",
        uuid: "8655460b-4862-4d11-800a-870482f4701b",
        nodeType: "project",
        children: []
      },
      {
        name: "A1A",
        uuid: "8655460b-4862-4d11-800a-870482f4701c",
        nodeType: "project",
        children: [
           {
              name: 'A1A111',
              children: []
           },
           {
              name: 'A1A112',
              children: []
           }
           ...
        ]
      }
    ]
  }
  

А затем нажатие на A1AAAA приведет к появлению других дочерних элементов, которые заменят пустой массив в A1A подобъекте и т.д…

Есть ли какой-либо эффективный способ сделать это?

Я пробовал что-то с несколькими находками для вложенных дочерних элементов, но этот подход не будет очень эффективным на n уровнях.

   const testChildren2 = [
    {
      name: "AAA123",
      uuid: "00214ef8-fb29-4326-b236-3c90ab47eaaf",
      children: []
    }
  ]
  
       let dumbTreeIndexA = dumbTree.children.findIndex((elt) => elt.name === 'AAA')
      dumbTree.children[dumbTreeIndexA].children = testChildren2

      // vobs/AAA/AAA123
      const studyIndex = dumbTree.children[dumbTreeIndexA].children.findIndex((elt) => elt.name === 'AAA123')
  

Я открыт для существующих библиотек, таких как Lodash, ramdaJS, но пока не нашел хорошего способа сделать это.

Комментарии:

1. Могу я спросить, почему вы используете findIndex ?

2. Каждый уровень имеет свойство name, определенное в массиве объектов, используя findIndex, я могу найти на каждом уровне, какой дочерний элемент принадлежит пути с соответствующим индексом