首頁 > web前端 > js教程 > 主體

JavaScript怎麼處理樹狀結構資料的增刪改查

WBOY
發布: 2022-07-18 13:53:13
轉載
2252 人瀏覽過

本篇文章為大家帶來了關於javascript的相關知識,其中主要整理了處理樹狀結構數據的增刪改查的相關問題,相比普通的數組結構數據,樹狀結構的處理就沒有數組那麼的直觀,但是也沒那麼複雜,需要多一步遞歸查找來對資料進行深度遍歷操作,下面一起來看一下,希望對大家有幫助。

JavaScript怎麼處理樹狀結構資料的增刪改查

【相關推薦:javascript影片教學web前端

問題描述:JS處理樹狀結構的增刪改查

最近在開發一個後台管理系統的權限管理模組,涉及到各種樹狀結構的資料處理邏輯,例如:增,刪,改,查等;比起普通的數組結構數據,樹狀結構的處理就沒有數組那麼的直觀,但是也沒那麼複雜,需要多一步——遞歸查找來對數據進行深度遍歷操作,那麼這裡呢,部落客也將開發過程中總結出來的方法分享給大家,一文帶你吃透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'
        }]
      }];
登入後複製
解決方案:

1、新增節點

尋找樹狀結構的指定節點,新增子節點,程式碼如下:

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
}
登入後複製
2、刪除節點

找出樹裝結構的指定節點,刪除節點,程式碼如下

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)
  }
}
登入後複製

3、修改節點

遞歸尋找並修改某個節點的狀態,程式碼如下:

  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);
      }
    }
登入後複製

4、尋找節點

#遞迴尋找樹形節點的某個節點,程式碼:

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影片教學web前端

以上是JavaScript怎麼處理樹狀結構資料的增刪改查的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板