将给定格式的线性结构转换为树形结构

在前端开发过程中,经常会遇到各种各样的数据解析问题,今天来说明一下如何将给定格式的线性结构转换为树形结构。

1.后端返回的源数据:s

{
    "status": "success",
    "datas":
        [
            {
                "id": 1,
                "name": "指标1",
                "in": 2   //改字段为其父级节点的id
            },
            {
                "id": 2,
                "name": "指标2"
            },
            {
                "id": 3,
                "name": "指标3",
                "in": 1
            }
        ]
}
2.最终需要的目标数据:d

{
    "status": "success",
    "datas": [
        {
            "id": 2,
            "name": "指标2",
            "childen": [
                {
                    "id": 1,
                    "name": "指标1",
                    "in":2,
                    "childen":[
                        {
                            "id":3 ,
                            "name": "指标3",
                             "in":2
                        }
                    ]
                }
            ],
        }
    ]
}
3.解析过程:

function Tree(datas){
    var tree={},
        parent_id;
    for(var i=0;ilength;i++){
        var item=datas[i];
        tree[item.id]=item
    }
    var root=null;
    for(var i=0;ilength;i++){
        var obj=datas[i];
        if(obj.in==null){
            root=tree[obj.id]
        }else{
            parent_id=obj.in;
            if(!tree[parent_id].children){
                tree[parent_id].children=[]
            }
            tree[parent_id].children.push(tree[obj.id])
        }
    }
    return root;
}
var source=s.datas;

var res=Tree(sources);

你可能感兴趣的:(将给定格式的线性结构转换为树形结构)