vue 树节点递归获取父节点 id

思路:
首先,递归循环tree节点的所有节点;
然后创建一个map类型去接,set所有节点的id对属性名,递归循环节点就把父对象id去赋值子节点的id;
所有tree树形数据结构,就会有parentID,id,没有父节点可以默认赋值parentID=0。

import MenuData from 'xxx公共方法'
const treeList = {
    'code': '1',
    'text': '公司1',
    'leaf': false,
    'children': [
      {
        'code': '2',
        'text': '部门',
        'leaf': false,
        'children': [
          {
            'code': '3',
            'text': '小组1',
            'leaf': true,
            'children': null
          },
          {
            'code': '4',
            'text': '小组2',
            'leaf': true,
            'children': null
          }
        ]
      },
      {
        'code': '5',
        'text': '公司2',
        'leaf': false,
        'children': [
          {
            'code': '6',
            'text': '简称',
            'leaf': true,
            'children': null
          }
        ]
      }
    ]
  }
 const treeMenu = new MenuData(treeList, 'code')
 // 获取tree的parentId
 const parent = treeMenu.getParent(node.code)

公共方法:

class MenuData {
  menuMap = new Map();
  menus = [];
  codeName = ''
  constructor(data, code) {
    this.codeName = code || 'id'
    this.init(data)
  }

  init(data) {
    data.forEach(item => {
      item.parentId = '0'
      this.deepSetItem(item)
    })
  }
  
  deepSetItem(item) {
    this.menuMap.set(item[this.codeName], item)
    this.menus.push(item)
    if (item.children) {
      item.children.forEach(menuItem => {
        menuItem.parentId = item[[this.codeName]] // item[[this.codeName]]是父节点的 id,  menuItem.parentId是当前节点 id
        this.deepSetItem(menuItem)
      })
    }
  }

  getMenuById(id) {
    return this.menuMap.get(id)
  }

  getChildern(id) {
    return this.menuMap.get(id).children
  }

  getParent(id) {
    const item = this.getMenuById(id)
    const parent = this.getMenuById(item.parentId)
    return parent
  }
}

export default MenuData

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设你有一个形结构的数据,其中每个节点有一个唯一的ID和一个parentID表示它的父节点ID。你可以使用递归算法来找到该节点的所有父节点。 首先,你需要定义一个函数来查找指定节点父节点。该函数将接收一个节点ID形数据作为参数。它将遍历整个形结构,查找与该节点ID匹配的节点,并返回其父节点ID。 ``` function findParentNodeId(nodeId, treeData) { for (let i = 0; i < treeData.length; i++) { const node = treeData[i]; if (node.id === nodeId) { return node.parentId; } if (node.children) { const parentId = findParentNodeId(nodeId, node.children); if (parentId) { return parentId; } } } return null; } ``` 接下来,你可以使用该函数来查找指定节点的所有父节点。你可以定义一个递归函数,该函数将接收一个节点ID形数据作为参数,并使用findParentNodeId()函数来查找其父节点。如果找到父节点,则将其ID存储在一个数组中,并递归调用该函数,直到找到所有父节点为止。 ``` function findParentNodes(nodeId, treeData) { const parentNodes = []; let parentId = findParentNodeId(nodeId, treeData); while (parentId !== null) { parentNodes.push(parentId); parentId = findParentNodeId(parentId, treeData); } return parentNodes; } ``` 现在,你可以使用findParentNodes()函数来查找指定节点的所有父节点。例如,假设你有以下形数据: ``` const treeData = [ { id: 1, parentId: null, children: [ { id: 2, parentId: 1 }, { id: 3, parentId: 1 }, { id: 4, parentId: 1, children: [ { id: 5, parentId: 4 }, { id: 6, parentId: 4 }, ], }, ], }, ]; ``` 如果你想找到节点5的所有父节点,可以使用以下代码: ``` const parentNodes = findParentNodes(5, treeData); console.log(parentNodes); // [4, 1] ``` 这将返回一个包含节点4和1的数组,表示节点5的所有父节点

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值