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