Baru-baru ini, saya telah mengembangkan modul manajemen izin untuk sistem manajemen backend, yang melibatkan logika pemrosesan data dari berbagai struktur pohon, seperti: penambahan, penghapusan , modifikasi, kueri, dll.; dibandingkan dengan data struktur Array biasa, pemrosesan struktur pohon tidak seintuitif array, tetapi tidak terlalu rumit - pencarian rekursif untuk melakukan traversal data yang mendalam di sini, blogger juga akan merangkum proses pengembangan. Saya akan membagikan metode yang saya buat. Artikel ini akan memberi Anda pemahaman menyeluruh tentang pemrosesan data struktur pohon JS:
Contoh struktur data
misalkan data = [{ nomor identitas: 1, label: 'Tingkat 1', anak-anak: [{ nomor identitas: 4, label: 'Tingkat 1-1', anak-anak: [{ nomor identitas: 9, label: 'Tingkat 3 1-1-1' }, { nomor identitas: 10, label: 'Tingkat 3 1-1-2' }] }] }, { nomor identitas: 2, label: 'Tingkat 2', anak-anak: [{ nomor identitas: 5, label: 'Tingkat 2-1' }, { nomor identitas: 6, label: 'Tingkat 2-2' }] }, { nomor identitas: 3, label: 'Tingkat 3', anak-anak: [{ nomor identitas: 7, label: 'Tingkat 2 3-1' }, { nomor identitas: 8, label: 'Tingkat 3-2' }] }];
untuk menemukan node yang ditentukan dalam struktur pohon dan tambahkan node anak baru. Kodenya adalah sebagai berikut:
const appendNodeInTree = (id, tree, obj) => { pohon.forEach(ele=> { if (ele.id === id) { ele.anak-anak ? ele.anak-anak.push(obj) : ele.anak-anak = [obj] } kalau tidak { if (ele.anak-anak) { appendNodeInTree(id, ele.children, obj) } } }) pohon kembali }
Temukan node yang ditentukan dalam struktur pohon dan hapus node tersebut. Kodenya adalah sebagai berikut
const deleteNodeInTree=(treeList, id)=> { // Hapus elemen dari array (struktur pohon) dengan id if (!treeList || !treeList.length) { kembali } for (misalkan i = 0; i < treeList.length; i++) { jika (Daftar Pohon[i].id === id) { treeList.splice(i, 1); merusak; } hapusNodeInTree(treeList[i].anak-anak, id) } }
untuk mencari dan mengubah status node secara rekursif. Kodenya adalah sebagai berikut:
const updateNodeInTree=(treeList,id, obj)=> { if (!treeList || !treeList.length) { kembali; } for (misalkan i = 0; i < treeList.length; i++) { jika (Daftar Pohon[i].id == id) { Daftarpohon[i]= objek; merusak; } updateNodeInTree(treeList[i].children,id,obj); } }
secara rekursif untuk mencari node pada node pohon, kode :
const findNodeInTree = (data, key, callback) => { for (misalkan i = 0; i < data.length; i++) { if (data[i].kunci == kunci) { kembali panggilan balik(data[i], saya, data) } if (data[i].anak-anak) { findNodeInTree (data[i].anak-anak, kunci, panggilan balik) } } } //Metode untuk menyimpan node yang ditemukan biarkan Obj={} findNodeInTree(data, kunci, (item, indeks, arr) => { Obj = barang }) // Ini adalah node yang ditemukan sesuai dengan Obj console.log(Obj)