123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // const chapter = [
- // {
- // level: 1,
- // id: 1,
- // name: '第一卷',
- // },
- // {
- // level: 2,
- // id: 2,
- // name: '第一章',
- // },
- // {
- // level: 3,
- // id: 12,
- // name: '第一节',
- // },
- // {
- // level: 2,
- // id: 3,
- // name: '第二章',
- // },
- // {
- // level: 2,
- // id: 4,
- // name: '第三章',
- // },
- // {
- // level: 1,
- // id: 5,
- // name: '第二卷',
- // },
- // {
- // level: 2,
- // id: 6,
- // name: '第一章',
- // },
- // {
- // level: 2,
- // id: 7,
- // name: '第二章',
- // },
- // {
- // level: 2,
- // id: 8,
- // name: '第三章',
- // },
- // {
- // level: 1,
- // id: 9,
- // name: '第三卷',
- // },
- // {
- // level: 2,
- // id: 10,
- // name: '第一章',
- // },
- // {
- // level: 2,
- // id: 11,
- // name: '第二章',
- // },
- // ]
- //
- // function buildTree(chapters) {
- // const tree = [];
- // let currentVolume = null;
- //
- // chapters.forEach(chapter => {
- // if (chapter.level === 1) {
- // // Create a new volume node
- // currentVolume = {
- // ...chapter,
- // children: []
- // };
- // tree.push(currentVolume);
- // } else if (chapter.level === 2 && currentVolume) {
- // // Add chapter to the current volume's children
- // currentVolume.children.push(chapter);
- // }
- // });
- //
- // return tree;
- // }
- //
- // const chapterTree = buildTree(chapter);
- //
- // console.log(JSON.stringify(chapterTree, null, 2));
- // =================================================
- function buildTree(data) {
- const nodeMap = new Map();
- const tree = [];
-
- // 初始化节点映射
- data.forEach(node => {
- // 确保每个节点都有 children 属性
- node.children = [];
- nodeMap.set(node.id, node);
- });
-
- // 构建树
- data.forEach(node => {
- if (node.parent_id !== null) {
- // 确保 id 和 parent_id 类型一致
- const parentNode = nodeMap.get(Number(node.parent_id));
- if (parentNode) {
- parentNode.children.push(node);
- }
- } else {
- // 顶层节点
- tree.push(node);
- }
- });
-
- return tree;
- }
- // 示例数据
- const data = [
- {"id":103282,"name":"封面","level":0,"order_id":"b5c723069afad903d9410a1b87ee430d","parent_id":null,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/b5c723069afad903d9410a1b87ee430d.html"},
- {"id":103283,"name":"主目录","level":0,"order_id":"d2ae72f833f4622b4dad008d962dca63","parent_id":null,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/d2ae72f833f4622b4dad008d962dca63.html"},
- {"id":103284,"name":"史记","level":0,"order_id":"7c95352994901b619b32372054b2ad9d","parent_id":null,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/7c95352994901b619b32372054b2ad9d.html"},
- {"id":103285,"name":"五帝本纪第一","level":1,"order_id":"8f528e29556ad5246cf6c972c381bbed","parent_id":103284,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/8f528e29556ad5246cf6c972c381bbed.html"},
- {"id":103286,"name":"夏本纪第二","level":1,"order_id":"601b466b63d71a0bf787528254581282","parent_id":103284,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/601b466b63d71a0bf787528254581282.html"},
- {"id":103287,"name":"殷本纪第三","level":1,"order_id":"798fc04674f31ceae6c4f4d5b3b9f6db","parent_id":103284,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/798fc04674f31ceae6c4f4d5b3b9f6db.html"},
- {"id":103288,"name":"周本纪第四","level":1,"order_id":"8fa943845104b4891a1bf1191c2e2414","parent_id":103284,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/8fa943845104b4891a1bf1191c2e2414.html"},
- {"id":103289,"name":"秦本纪第五","level":1,"order_id":"f0371fc303cd35ffe95c4201f7073a91","parent_id":103284,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/f0371fc303cd35ffe95c4201f7073a91.html"},
- {"id":103290,"name":"秦始皇本纪第六","level":1,"order_id":"9af7c7db6c4ce70d6c37b47dffbec21f","parent_id":103284,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/9af7c7db6c4ce70d6c37b47dffbec21f.html"},
- {"id":103291,"name":"项羽本纪第七","level":1,"order_id":"297ee4d17393155dc0e989a78136984a","parent_id":103284,"path":"./base_files/1a7c3ccc61a0c00998d588971ee4e567/Text/297ee4d17393155dc0e989a78136984a.html"},
- ];
- // 构建树并输出
- const tree = buildTree(data);
- console.log(JSON.stringify(tree, null, 2));
|