Recentemente, tenho desenvolvido um módulo de gerenciamento de permissão para um sistema de gerenciamento de backend, que envolve lógica de processamento de dados de várias estruturas de árvore, como: adição, exclusão. , modificação , consulta, etc.; em comparação com dados de estrutura de array comuns, o processamento da estrutura de árvore não é tão intuitivo quanto o de array, mas não é tão complicado. aqui, o blogueiro também resumirá o processo de desenvolvimento. Compartilharei o método que criei. Este artigo fornecerá uma compreensão completa do processamento de dados da estrutura em árvore JS:
Exemplo de estrutura de dados,
deixe data = [{ identificação: 1, rótulo: 'Nível 1', crianças: [{ identificação: 4, rótulo: 'Nível 1-1', crianças: [{ identificação: 9, rótulo: 'Nível 3 1-1-1' }, { identificação: 10, rótulo: 'Nível 3 1-1-2' }] }] }, { identificação: 2, rótulo: 'Nível 2', crianças: [{ identificação: 5, rótulo: 'Nível 2-1' }, { identificação: 6, rótulo: 'Nível 2-2' }] }, { identificação: 3, rótulo: 'Nível 3', crianças: [{ identificação: 7, rótulo: 'Nível 2 3-1' }, { identificação: 8, rótulo: 'Nível 3-2' }] }];
para encontrar o nó especificado na estrutura da árvore e adicione um novo nó filho. O código é o seguinte:
const appendNodeInTree = (id, tree, obj) => {. árvore.forEach(ele=> { if (ele.id === id) { ele.crianças?ele.crianças.push(obj): ele.crianças = [obj] } outro { if (ele.filhos) { anexarNodeInTree(id, ele.filhos, obj) } } }) árvore de retorno }
Encontre o nó especificado na estrutura em árvore e exclua o nó. O código é o seguinte
const removeNodeInTree=(treeList, id)=> { // Remove elementos da matriz (estrutura em árvore) por id if. (!treeList || ! treeList.length) { retornar } for (seja i = 0; i < treeList.length; i++) { if (treeList[i].id === id) { treeList.splice(i, 1); quebrar; } removeNodeInTree(treeList[i].filhos, id) } }
para pesquisar e modificar recursivamente o status de um nó. O código é o seguinte:
const updateNodeInTree=(treeList,id, obj)=> {. if (!treeList || !treeList.length) { retornar; } for (seja i = 0; i < treeList.length; i++) { if (treeList[i].id == id) { listaárvore[i]= obj; quebrar; } updateNodeInTree(treeList[i].filhos,id,obj); } }
recursivamente para encontrar um nó no nó da árvore, código:
const findNodeInTree = (dados, chave, retorno de chamada) => { for (seja i = 0; i < data.length; i++) { if (dados[i].chave == chave) { retornar retorno de chamada (dados[i], i, dados) } if (dados[i].filhos) { findNodeInTree (dados[i].filhos, chave, retorno de chamada) } } } //O método para armazenar o nó encontrado let Obj={} findNodeInTree(dados, chave, (item, índice, arr) => { Obj = item }) // Este é o nó a ser encontrado correspondente ao Obj console.log(Obj)