本篇文章為大家帶來了關於javascript的相關知識,其中主要整理了處理樹狀結構數據的增刪改查的相關問題,相比普通的數組結構數據,樹狀結構的處理就沒有數組那麼的直觀,但是也沒那麼複雜,需要多一步遞歸查找來對資料進行深度遍歷操作,下面一起來看一下,希望對大家有幫助。
【相關推薦:javascript影片教學、web前端】
最近在開發一個後台管理系統的權限管理模組,涉及到各種樹狀結構的資料處理邏輯,例如:增,刪,改,查等;比起普通的數組結構數據,樹狀結構的處理就沒有數組那麼的直觀,但是也沒那麼複雜,需要多一步——遞歸查找來對數據進行深度遍歷操作,那麼這裡呢,部落客也將開發過程中總結出來的方法分享給大家,一文帶你吃透JS樹裝結構資料處理:
# #資料結構範例
let data = [{ id: 1, label: '一级 1', children: [{ id: 4, label: '二级 1-1', children: [{ id: 9, label: '三级 1-1-1' }, { id: 10, label: '三级 1-1-2' }] }] }, { id: 2, label: '一级 2', children: [{ id: 5, label: '二级 2-1' }, { id: 6, label: '二级 2-2' }] }, { id: 3, label: '一级 3', children: [{ id: 7, label: '二级 3-1' }, { id: 8, label: '二级 3-2' }] }];
const appendNodeInTree = (id, tree, obj) => { tree.forEach(ele=> { if (ele.id === id) { ele.children ? ele.children.push(obj) : ele.children = [obj] } else { if (ele.children) { appendNodeInTree(id, ele.children, obj) } } }) return tree }
const removeNodeInTree=(treeList, id)=> { // 通过id从数组(树结构)中移除元素 if (!treeList || !treeList.length) { return } for (let i = 0; i < treeList.length; i++) { if (treeList[i].id === id) { treeList.splice(i, 1); break; } removeNodeInTree(treeList[i].children, id) } }
const updateNodeInTree=(treeList,id, obj)=> { if (!treeList || !treeList.length) { return; } for (let i = 0; i < treeList.length; i++) { if (treeList[i].id == id) { treeList[i]= obj; break; } updateNodeInTree(treeList[i].children,id,obj); } }
const findNodeInTree = (data, key, callback) => { for (let i = 0; i < data.length; i++) { if (data[i].key == key) { return callback(data[i], i, data) } if (data[i].children) { findNodeInTree (data[i].children, key, callback) } } } // 所查找到的节点要存储的方法 let Obj={} findNodeInTree(data, key, (item, index, arr) => { Obj = item }) // 此时就是Obj对应的要查找的节点 console.log(Obj)
以上是JavaScript怎麼處理樹狀結構資料的增刪改查的詳細內容。更多資訊請關注PHP中文網其他相關文章!