• 技术文章 >web前端 >js教程

    JavaScript怎么处理树状结构数据的增删改查

    长期闲置长期闲置2022-07-18 13:53:13转载78
    本篇文章给大家带来了关于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,如有侵犯,请联系admin@php.cn删除
    专题推荐:javascript
    上一篇:详细了解JavaScript编译原理 下一篇:一文了解Node中的文件模块和核心模块
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• JavaScript原型与原型链知识点详解• 什么是闭包?聊聊javascript中闭包,看看闭包有哪些作用?• JavaScript常见的Number对象汇总• 总结分享JavaScript中异步与回调的基本概念• 详细介绍JavaScript中Promise的基本概念及使用方法
    1/1

    PHP中文网