方法
const result = tocNodes.reduce((acc, curr) => {
if (curr.level === 1) {
acc.push({
text: curr.text,
level: curr.level
});
} else {
let parent = acc[acc.length - 1];
for (let i = 1; i < curr.level - 1; i++) {
parent = parent.children[0];
}
if (!parent.children) {
parent.children = [];
}
parent.children.push({
text: curr.text,
level: curr.level
});
}
return acc;
}, []);
数据
const arr = [{
name: 'a',
level: 1
}, {
name: 'b',
level: 2
}, {
name: 'b2',
level: 3
}, {
name: 'b22',
level: 4
}, {
name: 'c',
level: 1
}, {
name: 'd',
level: 2
}];
转children
[{
"name": "a",
"level": 1,
"children": [{
"name": "b",
"level": 2,
"children": [{
"name": "b2",
"level": 3,
"children": [{
"name": "b22",
"level": 4
}]
}]
}]
}, {
"name": "c",
"level": 1,
"children": [{
"name": "d",
"level": 2
}]
}]
方法二
loadTreeData(data, pid, text, cid, root) { let tree = []; data.forEach(e => { if (root === e[pid]) { e['label'] = e[text]; e['id'] = e[cid] e['children'] = this.loadTreeData(data, pid, text, cid, e[cid]); tree.push(e); } }); return tree; },