递归 树形结构 级联组件数据处理

// 原理: 先给根节点找子,再给子找子,一次类推(某个节点一直找到尽头才开启下一个节点)
好比: 
    根节点是:爷爷 
    子节点有:叔叔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))