您好,登錄后才能下訂單哦!
這篇文章主要介紹“JavaScript如何處理樹狀結(jié)構(gòu)數(shù)據(jù)的增刪改查”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“JavaScript如何處理樹狀結(jié)構(gòu)數(shù)據(jù)的增刪改查”文章能幫助大家解決問題。
最近在開發(fā)一個后臺管理系統(tǒng)的權限管理模塊,涉及到各種樹狀結(jié)構(gòu)的數(shù)據(jù)處理邏輯,例如:增,刪,改,查等;相比普通的數(shù)組結(jié)構(gòu)數(shù)據(jù),樹狀結(jié)構(gòu)的處理就沒有數(shù)組那么的直觀,但是也沒那么復雜,需要多一步——遞歸查找來對數(shù)據(jù)進行深度遍歷操作,那么這里呢,博主也將開發(fā)過程中總結(jié)出來的方法分享給大家,一文帶你吃透JS樹裝結(jié)構(gòu)數(shù)據(jù)處理:
數(shù)據(jù)結(jié)構(gòu)示例
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' }] }];
查找樹裝結(jié)構(gòu)的指定節(jié)點,新增子節(jié)點,代碼如下:
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 }
查找樹裝結(jié)構(gòu)的指定節(jié)點,刪除節(jié)點,代碼如下
const removeNodeInTree=(treeList, id)=> { // 通過id從數(shù)組(樹結(jié)構(gòu))中移除元素 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) } }
遞歸查找并修改某個節(jié)點的狀態(tài),代碼如下:
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); } }
遞歸查找樹形節(jié)點的某個節(jié)點,代碼:
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) } } } // 所查找到的節(jié)點要存儲的方法 let Obj={} findNodeInTree(data, key, (item, index, arr) => { Obj = item }) // 此時就是Obj對應的要查找的節(jié)點 console.log(Obj)
關于“JavaScript如何處理樹狀結(jié)構(gòu)數(shù)據(jù)的增刪改查”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。