// 原理: 先给根节点找子,再给子找子,以此类推(某个节点一直找到尽头才开启下一个节点)
比如:
根节点是:爷爷
子节点有:叔叔1, 叔叔2
方法:先找爷爷的子节点,即叔叔1和叔叔2,但是在找叔叔2前,先把叔叔1的整个家族找全了,再去找叔叔2的家族。
示例:
let allList = [
{
id: 1,
pid: 0,
name: '老祖宗'
},
{
id: 2,
pid: 1,
name: '爷爷1'
},
{
id: 3,
pid: 1,
name: '爷爷2'
},
{
id: 4,
pid: 2,
name: '爸爸1'
},
{
id: 5,
pid: 3,
name: '爸爸2'
},
{
id: 6,
pid: 5,
name: '儿子'
}
];
// 获取根节点
let root = allList.find(item => item.pid === 0);
console.log('根节点', root)
function toTree (obj) {
// 给该节点创建一个children属性
obj.children = [];
allList.forEach(item => {
// 给该节点找"直接"的子级
if (item.pid === obj.id) {
obj.children.push(item);
// 给该节点再找"直接"的子级(找全该节点的家族)
toTree(item)
};
});
return obj;
}
console.log('输出', toTree(root))