js面试题解析

来源:互联网 发布:女装淘宝店铺起名字 编辑:程序博客网 时间:2024/06/05 19:02

题目一:

将下面给出的数据重新排列成有规律的树结构,并且将该节点的子节点放置在该节点的children属性内:

说明: PID为改对象的父级id

 var json=[        {            "id":"1",            "PID":"0",            "text":"父亲1"        },        {            "id":"11",            "PID":"1",            "text":"子1"        },        {            "id":"200",            "PID":"112",            "text":"子112的孩子"        },        {            "id":"112",            "PID":"11",            "text":"子12"        },        {            "id":"2",            "PID":"0",            "text":"父亲2"        },        {            "id":"21",            "PID":"2",            "text":"子2"        }    ];

分析:

1.要想将给定的数据排序成树状结构,首先明确两者的连接关系: PID  和 id2.若想将给定的数据排序成树状结构,只需将相邻的父子节点连接在一起

算法:

    var setting = {        data: {            simpleData: {                id: "id",                pid: "PID",            },            key: {                children: "children"            }        }    };    function handleTree(json){        var mapObj={},            result = [], //返回结果            pid = setting.data.simpleData.pid,            id = setting.data.simpleData.id,            childern =setting.data.key.children;        //将json中的每一项的id为键,每一项为值保存在mapObj中        for (let i = 0,length = json.length; i < length; i++){            mapObj[json[i].id] = json[i];        }        for (let  i = 0,length = json.length; i < length; i++){            //判断是否有父节点            if (mapObj[json[i][pid]] &&  json[i][id] != json[i][pid]){ //有父节点                if ( ! mapObj[json[i][pid]][childern]){ //如果当前当前元素的父节点没有children属性,则创建                    mapObj[json[i][pid]][childern] = [];                }                mapObj[json[i][pid]][childern].push(json[i]);            }else{ //没有父节点                result.push(json[i]);            }        }        return result;    }    var r = handleTree(json);    console.log(r);