js递归组装目录树

  var data = {};
    data["children"]=[];
    var status_list =
        [
            {service: "svr3"},
            {service: "svr3"},
            {service: "svr2"},
            {service: "svr4"},
            {service: "udp_svr"},
            ];
    var deps = [
        { parent: "", child: "udp_svr"},
        {parent: "udp_svr", child: "svr2"},
        { parent: "svr2", child: "svr4"},
        { parent: "svr2", child: "svr3"},
    ];
    function parseData(deps, status_list) {
        deps.forEach((item) => {
            let result = status_list.find((listItem) => {
                return item.child == listItem.service
            });
            if (result) {
                Object.assign(item, result)
            }
        });
        data.children.push(deps.find((listItem) => {
            return listItem.parent == ''
        }));
        buildTree(this.data.children);
        return deps;
    }

     function buildTree(children) {
        if (!children) {
            return;
        }
        children.forEach(item => {
            deps.forEach(depsItem => {
                if (depsItem.parent == item.service) {
                    if (!item.children) {
                        item.children = []
                    }
                    let find = item.children.find((finditem) => {
                        return depsItem.child == finditem.service
                    });
                    if (!find) {
                        item.children.push(
                            depsItem
                        )
                    }
                }
            });
            buildTree(item.children)
        })
    }
    console.log(parseData(deps, status_list)[0])


    var oldDocuments = [
        { parent_id: -1,id:"udp_svr"},
        {parent_id: "udp_svr",id:"svr2"},
        { parent_id: "svr2",id:"svr4"},
        { parent_id: "svr2",id:"svr3"},
    ];
    function parseData(oldDocuments) {
        let data = {
            children:[]
        };
        data.children.push(oldDocuments.find((item) => {
            return item.parent_id == -1
        }));
        buildTree(data.children,oldDocuments);
        return data.children
    }

    function buildTree(children,oldDocuments) {
        if (!children) {
            return;
        }
        children.forEach(item => {
            oldDocuments.forEach(oldDocumentItem => {
                if (oldDocumentItem.parent_id == item.id) {
                    if (!item.children) {
                        item.children = []
                    }
                    let find = item.children.find((finditem) => {
                        return oldDocumentItem.id == finditem.id
                    });
                    if (!find) {
                        item.children.push(
                            oldDocumentItem
                        )
                    }
                }
            });
            buildTree(item.children,oldDocuments)
        })
    }
    console.log(parseData(oldDocuments))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值