欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS 关于树的操作 查找所有子节点,找出某一节点的父节点

程序员文章站 2022-06-08 09:14:21
...

1. 获取全部子节点(广度优先)VUE代码

// 数据
data: [{
        id: 0,
        label: '0级',
        children: [{
          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'
          }]
        }]
      }],
// 方法
treeForeach(tree, func) {
      tree.forEach(data => {
        data.children && this.treeForeach(data.children, func) // 遍历子树
        func(data)
      })
    },
// 调用
mounted() {
    this.treeForeach(this.data, node => { console.log(node.id) })
  }

2. 获取全部子节点(广度优先)VUE代码

// parentNodes.js
/**
 * @description: 根据传入的[id]找寻父节点
 * @param { id: 选中节点的id, upid: 选中节点的upid }, 要查找的树, nodes
 */
export function findAllParent(node, tree, parentNodes = [], index = 0) {
  if (!node || node.upid === 0) {
    return
  }
  findParent(node, parentNodes, tree)
  const parentNode = parentNodes[index]
  index += 1
  findAllParent(parentNode, tree, parentNodes, index)
  return parentNodes
}

function findParent(node, parentNodes, tree) {
  for (let i = 0; i < tree.length; i++) {
    const item = tree[i]
    if (item.id === node.upid) {
      parentNodes.push(item)
      return
    }
    if (item.children && item.children.length > 0) {
      findParent(node, parentNodes, item.children)
    }
  }
}

export default findAllParent


// 导入
import findParentNodes from '@/utils/parentNodes'

// 查找父结点
const parentNodes = findParentNodes({ id: this.choosed.id, upid: this.choosed.upid }, [root], nodes)

相关标签: JS