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))
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: