数组转树方法

1.使用递归方法

// 把平铺的数组结构转成树形结构
const arr = [
    { 'id': '29', 'pid': '', 'name': '总裁办' },
    { 'id': '2c', 'pid': '', 'name': '财务部' },
    { 'id': '2d', 'pid': '2c', 'name': '财务核算部' },
    { 'id': '2f', 'pid': '2c', 'name': '薪资管理部' },
    { 'id': 'd2', 'pid': '', 'name': '技术部' },
    { 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部' }
]
export function arrayToTree(arr, pid) {
    //先找出children的父级
    const tree = arr.filter(item => item.pid === pid)
    // [
    //     { 'id': '29', 'pid': '', 'name': '总裁办' },
    //     { 'id': '2c', 'pid': '', 'name': '财务部' },
    //     { 'id': 'd2', 'pid': '', 'name': '技术部' }
    // ]
    //开始遍历并添加children属性
    tree.forEach(item => {
        item.children = arrayToTree(arr, item.id)
    })
    //返回树形结构
    return tree
}
const res = arrayToTree(arr, '')
console.log(res);

2.不使用递归

//把平铺的数组结构转成树形结构
const arr = [
    { 'id': '29', 'pid': '', 'name': '总裁办' },
    { 'id': '2c', 'pid': '', 'name': '财务部' },
    { 'id': '2d', 'pid': '2c', 'name': '财务核算部' },
    { 'id': '2f', 'pid': '2c', 'name': '薪资管理部' },
    { 'id': 'd2', 'pid': '', 'name': '技术部' },
    { 'id': 'd3', 'pid': 'd2', 'name': 'Java研发部' }
]
export function tranListToTreeData(list) {
    // 1. 定义两个中间变量
    const tree = [], 
    map = {}      
    // 2. 通过id快速找到对应的元素,并给每个元素补充children属性
    list.forEach(item => {
        if (!item.children) {
            item.children = []
        }
        map[item.id] = item
    })

    // 3. 循环处理每个元素
    list.forEach(item => {
        const parent = map[item.pid]
        // 如果存在则表示item不是最顶层的数据
        if (parent) {
            parent.children.push(item)
        } else {
            // 如果不存在 则是顶层数据
            tree.push(item)
        }
    })
    return tree
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值