js生成评论树,无限级和两级

标签:            

js将sql查询出的评论生成树结构

无限级

function toTree(data) {
    data.forEach(function(item) {
        delete item.children;
    });
    var map = {};
    data.forEach(function(item) {
        map[item.id] = item;
    });
    var val = [];
    data.forEach(function(item) {
        var parent = map[item.parent_id];
        if (parent) {
            (parent.children || (parent.children = [])).push(item);
        } else {
            val.push(item);
        }
    });
    return val;
}

两级

function getTopParent(map,id){
    if(map[id].parent_id == 0){
        return id;
    }
    if(map[map[id].parent_id].parent_id == 0){
        return map[map[id].parent_id].id;
    }else{
        return getTopParent(map,map[map[id].parent_id].parent_id)
    }
}
function toTree(data) {
    data.forEach(function(item) {
        delete item.children;
    });
    var map = {};
    data.forEach(function(item) {
        map[item.id] = item;
    });
    var val = [];
    data.forEach(function(item) {
        var parent = map[item.parent_id];
        if (parent) {
            if(parent.parent_id == 0){
                (parent.children || (parent.children = [])).push(item);
            }else{
                (map[getTopParent(map,parent.parent_id)].children || (map[getTopParent(map,parent.parent_id)].children = [])).push(item);
            }
        } else {
            val.push(item);
        }
    });
    return val;
}
var data = [
    {id:1,parent_id:0,c:'第一个'},
    {id:2,parent_id:0,c:'第二个'},
    {id:3,parent_id:1,c:'回复 第一个'},
    {id:4,parent_id:1,c:'回复 第一个'},
    {id:5,parent_id:3,c:'回复 回复 第一个'},
    {id:6,parent_id:5,c:'回复 回复 回复 第一个'},
    {id:7,parent_id:1,c:'回复 第一个'},
    {id:8,parent_id:2,c:'回复 第二个'},
];
console.log(toTree(data))

发表评论 登录

目前评论:0