Vue里定义方法:通过子节点ID查找所有关联的父节点ID

// 通过子节点ID查找所有关联的父节点
    getTreeIds(tree, nodeId, config){
      const { children = 'children', id = 'id' } = config || {};
      const toFlatArray = (tree, parentId) => {
        return tree.reduce((t, _) => {
          const child = _[children]
          return [
            ...t,
            parentId ? { ..._, parentId } : _,
            ...(child && child.length ? toFlatArray(child, _[id]) : [])]
        }, [])
      };
      const getIds = flatArray => {
        let ids = [nodeId]
        let child = flatArray.find(_ => _[id] === nodeId)
        while (child && child.parentId) {
          ids = [child.parentId, ...ids]
          child = flatArray.find(_ => _[id] === child.parentId)
        }
        return ids
      }
      return getIds(toFlatArray(tree))
    }
// 数据
data(){
  return {
    treeData: [
      {
        id: 1,
        label: 'test1',
        children: [
          {
            id: 2,
            label: 'test1-1',
            children: [
              {
                id: 3,
                label: 'test1-1-1'
              },
              {
                id: 4,
                label: 'test1-1-2',
                children: [
                  {
                    id: 5,
                    label: 'test1-1-1-1'
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}
// 调用
   let arr = this.getTreeIds(this.treeData, 5); // arr的值为[1, 2, 4, 5]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

Yongqiang Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值