// 原理: 先給根節點找子,再給子找子,一次類推(某個節點一直找到盡頭纔開啓下一個節點) 好比: 根節點是:爺爺 子節點有:叔叔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))