var chapterTree = {
name: '总章节',
children: [
{
name: '章节一',
children: [
{
name: '第一节',
children: [ { name: '第一小节' }, { name: '第二小节' } ],
},
{ name: '第二节' },
],
},
{
name: '章节二',
children: [ { name: '第三节' }, { name: '第四节' } ],
},
],
};
function serialize(tree) {
function travel(tree, str, arr) {
if (Object.prototype.toString.call(tree) === '[object Array]') {
for (let i = 0; i < tree.length; i++) {
arr.push(tree[i]['name']);
if ('children' in tree[i]) {
str = travel(tree[i]['children'], str, arr);
arr.concat(str);
}
}
return arr;
} else if (Object.prototype.toString.call(tree) === '[object Object]') {
arr.push(tree['name']);
if ('children' in tree) {
str = travel(tree['children'], str, arr);
return arr;
}
}
}
return travel(tree, '', []);
}
console.log(serialize(chapterTree));
// console.log(result); // ["总章节", "(1)章节一", "(1.1)第一节", "(1.1.1)第一小节", "(1.1.2)第二小节", "(1.2)第二节", "(2)章节二", "(2.1)第三节", "(2.2)第四节"]
2年前的写法太过繁琐看看新的解法
```javascript
function serialize(tree) {
function travel(tree, arr) {
arr.push(tree.name);
tree.children
? tree.children.forEach((child) => {
travel(child, arr);
})
: null;
return arr;
}
return travel(tree, []);
}
console.log(serialize(chapterTree));