#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, я могу найти на каждом уровне, какой дочерний элемент принадлежит пути с соответствующим индексом