JS 查询树形节点的最深层级 && 递归查找树形节点的某个节点

目录

1.查询树形节点的最深层级

2.递归查找树形节点的某个节点

3、查找数组的最深层级


1.查询树形节点的最深层级

// 获取树形节点的最深层级
export function getMaxFloor (treeData: any[] = []) {
  let max = 0
  function each (data: any[] = [], floor: number) {
    data.forEach(e => {
      e.floor = floor
      if (floor > max) {
        max = floor
      }
      if (e.children.length > 0) {
        each(e.children, floor + 1)
      }
    })
  }
  each(treeData,1)
  return max
}

const treeData = [
  {
    title: 'parent 1',
    key: '0-0',
    children: [
      {
        title: 'parent 1-0',
        key: '0-0-0',
        disabled: true,
        children: [
          {
            title: 'leaf',
            key: '0-0-0-0',
            disableCheckbox: true,
          },
          {
            title: 'leaf',
            key: '0-0-0-1',
          },
        ],
      },
      {
        title: 'parent 1-1',
        key: '0-0-1',
        children: [{ title: <span style={{ color: '#1890ff' }}>sss</span>, key: '0-0-1-0' }],
      },
    ],
  },
];

//调用以上封装好的方法
const maxNum = getMaxFloor(treeData)
//maxNum就是treeData的最深层级

2.递归查找树形节点的某个节点
 

    const loop = (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) {
          loop(data[i].children, key, callback)
        }
      }
    }

    // 所查找到的节点要存储的方法
    let Obj
    loop(data, dragKey, (item, index, arr) => {
      Obj = item
    })

    // 此时就是Obj对应的要查找的节点
    console.log(Obj)

3、查找数组的最深层级

    //  计算数组最深层级
    const arr = [1,3,3,[4,6,7,[5,6,7,43,[23,4]]]];
    function arrayDepth(arr, currDepth = 1) {
      let maxDepth = currDepth
      for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
          const depth = arrayDepth(arr[i], currDepth + 1)
          maxDepth = Math.max(maxDepth, depth)
        }
      }
      return maxDepth;
    }

    console.log(`最深层级为:${arrayDepth(arr )}`);

以上 就是封装好的方法,有需要的朋友可以参照一下的!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,以下是用 JavaScript 编写递归查询树形节点最深层级的代码示例: ```javascript function getDeepestLevel(node, level = 0) { if (!node.children || node.children.length === 0) { return level; } else { let maxLevel = level; for (let i = 0; i < node.children.length; i++) { const childLevel = getDeepestLevel(node.children[i], level + 1); if (childLevel > maxLevel) { maxLevel = childLevel; } } return maxLevel; } } ``` 其中,`node` 为树形节点,`level` 表示当前层级,初始默认为 0。如果节点没有子节点,则说明已经到达最深层级,返回当前层级。否则,遍历所有子节点递归调用 `getDeepestLevel` 方法,将当前层级加 1 传入,并取得最大的层级数,最后返回最大层级数即可。 ### 回答2: 可以使用JavaScript编写一个递归函数来查询树形节点最深层级。如下所示: ```javascript function findMaxDepth(treeNode) { // 如果节点为空,则深度为0 if (treeNode === null) { return 0; } // 初始化最大深度为1 let maxDepth = 1; // 遍历节点子节点 for(let i = 0; i < treeNode.children.length; i++) { // 递归调用findMaxDepth函数来获取子节点的最大深度 const childDepth = findMaxDepth(treeNode.children[i]); // 将子节点的最大深度加1与当前最大深度进行比较 maxDepth = Math.max(maxDepth, childDepth + 1); } return maxDepth; } // 示例数据,假设有如下树形结构 const tree = { value: 'A', children: [ { value: 'B', children: [ { value: 'C', children: [] }, { value: 'D', children: [] } ] }, { value: 'E', children: [] } ] }; // 调用函数来获取最大深度 const maxDepth = findMaxDepth(tree); console.log('最大深度为:', maxDepth); ``` 这段代码通过递归遍历树形结构的每个节点,然后比较每个子节点的最大深度并加1,最终返回整个的最大深度。示例数据中的树形结构为: ``` A / \ B E / \ C D ``` 最大深度为3。 ### 回答3: 可以使用递归的方式来查询树形节点最深层级。首先,我们需要定义一个函数来递归查询每一个子节点层级。 我们可以传入两个参数给这个函数:要查询节点和当前的层级。首先,我们判断这个节点是否有子节点。如果没有子节点,说明已经达到最深层级,我们返回当前的层级。如果有子节点,我们就需要对每一个子节点进行递归查询。 具体的实现代码如下: ```javascript function getDeepestLevel(node, level) { // 判断节点是否有子节点 if (node.children.length === 0) { return level; } else { let maxLevel = level; // 对每一个子节点进行递归查询 for (let i = 0; i < node.children.length; i++) { let currentLevel = getDeepestLevel(node.children[i], level + 1); // 更新最深层级 if (currentLevel > maxLevel) { maxLevel = currentLevel; } } return maxLevel; } } ``` 使用方法如下: ```javascript // 假设我们有以下的节点结构 const tree = { value: 'A', children: [ { value: 'B', children: [ { value: 'D', children: [] }, { value: 'E', children: [] } ] }, { value: 'C', children: [ { value: 'F', children: [] }, { value: 'G', children: [ { value: 'H', children: [] } ] } ] } ] }; // 调用函数查询最深层级 const deepestLevel = getDeepestLevel(tree, 0); console.log(deepestLevel); // 输出:3 ``` 这样,我们就可以使用递归的方式查询树形节点最深层级

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值