平铺转树形结构,树形子节点找所有父级id的path数组

日常与后端交互中,经常涉及平铺转树,通过子节点找父节点path的问题
直接上代码:

平铺转树形结构数据:

/**
 * @description: formatter array to tree.
 * @param : arr{Array}  tiled arr
 * @param : pid{string} parent id
 * @return {Array}
 * @author: Leo
 */
export function arrToTree(arr, pid = "0") {
  const res = [];
  arr.forEach((item) => {
    if (item.pid === pid) {
      const children = arrToTree(
        arr.filter((v) => v.pid !== pid),
        item.id
      );
      if (children.length) {
        res.push({ ...item, children });
      } else {
        res.push({ ...item });
      }
    }
  });
  return res;
}

树形子节点递归找所有父级id Path Array

/**
 * @description: tree childNode find path.
 * @param : tree{Array}
 * @param : func{Function}
 * @param : path{Array}
 * @return {Array}
 * @author: Leo
 */
export function treeFindPath(tree, func, path = []) {
  if (!tree) return [];
  for (const data of tree) {
    path.push(data.id);
    if (func(data)) return path;
    if (data.children) {
      const findChildren = treeFindPath(data.children, func, path);
      if (findChildren.length) return findChildren;
    }
    path.pop();
  }
  return [];
}

// 页面调用
treeFindPath( this.organizationIdList, node  =>  node.id === id);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值