数组转树形、树形转数组

数组转树形
let arr = [{
id: 1,
label: ‘1’,
parentId: -1,
}, {
id: 2,
label: ‘2’,
parentId: -1,
}, {
id: 3,
label: ‘1-1’,
parentId: 1,
}, {
id: 4,
label: ‘1-2’,
parentId: 1,
}, {
id: 5,
label: ‘2-1’,
parentId: 2,
}, {
id: 6,
label: ‘1-1-1’,
parentId: 3,
}, ]

    function Tree(arr, id_k, parent_k, isRoot) {
        if (!!!arr) return tree
        let tree = [],
            idObj = {}
        arr.forEach(item => idObj[item[id_k]] = item)
        Object.values(idObj).forEach(item => {
            let parent = idObj[item[parent_k]]
            if (!isRoot(item)) {
                !!!parent.children && (parent.children = [])
                let children = parent.children;
                !children.includes(item) && children.push(item)
            } else {
                tree = [...tree, item]
            }
        })

        return tree
    }

    const tree = Tree(arr, 'id', 'parentId', item => item.parentId === -1)
    console.log(tree)

 数组转树形
    function untieTree(arr, children_k = 'children') {
        if (!!!arr || Object.prototype.toString.call(arr) !== '[object Array]' || arr.length === 0) return [];
        let tree = []
        arr.forEach(item => {
            tree.push(item, ...untieTree(item[children_k]))
        })
        return tree
    }

    console.log(untieTree(tree))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值