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

这段代码实现了一个功能,从给定的树形数据结构中,通过子节点ID找出所有关联的父节点ID。它使用了递归方法将树结构展平,然后遍历找到指定节点及其所有父节点的ID。示例数据和调用展示了如何从节点5追溯到其所有父节点,得到结果[1,2,4,5]。
// 通过子节点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]

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yongqiang Chen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值