1 var source = [{
2 id: 1, pid: 0, name: 'body'}, {
3 id: 2, pid: 1, name: 'title'}, {
4 id: 3, pid: 1, name: 'div'}, {
5 id: 4, pid: 3, name: 'span'}, {
6 id: 5, pid: 3, name: 'icon'}, {
7 id: 6, pid: 4, name: 'subspan'}]
8 function toTree(data) {
9 let result = []
10 if (!Array.isArray(data)) {
11 return result
12 }
13 data.forEach(item => {
14 delete item.children;
15 });
16 let map = {};
17 data.forEach(item => {
18 map[item.id] = item;
19 });
20 data.forEach(item => {
21 let parent = map[item.pid];
22 if (parent) {
23 (parent.children || (parent.children = [])).push(item);
24 } else {
25 result.push(item);
26 }
27 });
28 return result;
29 }
30 console.log(toTree(source))