1 var source = [ 2 { 3 id: 1, 4 pid: 0, 5 name: 'body', 6 }, 7 { 8 id: 5555, 9 pid: 0, 10 name: 'script', 11 }, 12 { 13 id: 55551, 14 pid: 5555, 15 name: 'js', 16 }, 17 { 18 id: 2, 19 pid: 1, 20 name: 'title', 21 }, 22 { 23 id: 3, 24 pid: 1, 25 name: 'div', 26 }, 27 { 28 id: 4, 29 pid: 3, 30 name: 'span', 31 }, 32 { 33 id: 5, 34 pid: 3, 35 name: 'icon', 36 }, 37 { 38 id: 6, 39 pid: 4, 40 name: 'subspan', 41 }, 42 ]; 43 44 function toTree(data) { 45 let result = []; 46 if (!Array.isArray(data)) { 47 return result; 48 } 49 data.forEach((item) => { 50 delete item.children; 51 }); 52 let map = {}; 53 data.forEach((item) => { 54 map[item.id] = item; 55 }); 56 data.forEach((item) => { 57 let parent = map[item.pid]; 58 if (parent) { 59 (parent.children || (parent.children = [])).push(item); 60 } else { 61 result.push(item); 62 } 63 }); 64 return result; 65 } 66 console.log("树结构===", toTree(source)); 67 68 69 let newTree = toTree(source); 70 var resultArr = []; 71 function flat(nodes, parentId) { 72 if (!nodes || nodes.length === 0) return []; 73 nodes.forEach((node) => { 74 resultArr.push({ ...node }); 75 return flat(node.children, node.id); 76 }); 77 } 78 79 flat(newTree, 0); 80 console.log("铺平===", resultArr)