前端处理数组为多级嵌套树状结构

//原始数据
 var v = [
        { id: 9, name: "第九个", prant_id: 5 },
        { id: 1, name: "第一个" },
        { id: 2, name: "第二个" },
        { id: 3, name: "第三个" },
        { id: 4, name: "第四个" },
        { id: 5, name: "第五个", prant_id: 1 },
        { id: 6, name: "第六个", prant_id: 5 },
        { id: 7, name: "第七个", prant_id: 5 },
        { id: 8, name: "第八个", prant_id: 1 },
        { id: 10, name: "第十个", prant_id: 5 },
        { id: 11, name: "第十一个", prant_id: 6 },
        
    ]
    function filterToTree(array) {
        let _map = new Map()
        let del_arr = []
        let returnArr = []
        for (let index = 0; index < array.length; index++) {
            _map.set(array[index].id, array[index])
        }
        array.forEach(element => {
            if ('prant_id' in element) {
                del_arr.push(element.id) //添加要删掉的ID
                recursion(element.prant_id, element) // 递归处理
            }
        });

        
        function recursion(key, val) {

            let _get = JSON.parse(JSON.stringify(_map.get(key)))
            if (Array.isArray(_get.childen)) {
                _get.childen = _get.childen.filter(function (item) { return item.id != val.id })
                _get.childen.push(val)
            } else {
                _get.childen = [val]
            }
            _map.set(key, _get)
            if ("prant_id" in _get) {
                recursion(_get.prant_id, _get)
            }

        }
        // 处理结果
        _map.forEach((k, v) => {
            if (!del_arr.includes(k.id)) {
                returnArr.push(k)
            }

        })
        return returnArr

    }
    console.log(filterToTree(v))

如有问题或者好的意见欢迎指出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值