如何将扁平的章节数据转换为嵌套的树形结构?

如何将扁平的章节数据转换为嵌套的树形结构?

本文介绍如何将扁平的章节数据转换为嵌套的树形结构。假设我们有一个扁平数组,每个对象包含 level(层级)、content(内容)和 url(链接)字段,表示章节的层级、内容和 URL。我们需要将其转换为嵌套的树形结构,其中每个父节点包含其子节点,子节点的 level 值大于父节点。

原始数据结构:

const chapters = [{  level: '1',  content: '案例概况010000-170900',  url: '案例概况010000-170900.html'},{  level: '2',  content: '案例概况010100-170901',  url: '案例概况010100-170901.html'},{  level: '2',  content: '案例概况010200-170902',  url: '案例概况010200-170902.html'},{  level: '3',  content: '案例概况010201-170903',  url: '案例概况010201-170903.html'},{  level: '1',  content: '案例概况020000-170904',  url: '案例概况020000-170904.html'},{  level: '1',  content: '案例概况030000-170905',  url: '案例概况030000-170905.html'},{  level: '2',  content: '案例概况030100-170906',  url: '案例概况030100-170906.html'}];

目标嵌套结构:

const treeStructure = [{  level: '1',  content: '案例概况010000-170900',  url: '案例概况010000-170900.html',  childs: [{    level: '2',    content: '案例概况010100-170901',    url: '案例概况010100-170901.html',    childs: []  },{      level: '2',      content: '案例概况010200-170902',      url: '案例概况010200-170902.html',    childs: [{      level: '3',      content: '案例概况010201-170903',      url: '案例概况010201-170903.html'    }]  }]},{  level: '1',  content: '案例概况020000-170904',  url: '案例概况020000-170904.html',  childs: []},{  level: '1',  content: '案例概况030000-170905',  url: '案例概况030000-170905.html',  childs: [{    level: '2',    content: '案例概况030100-170906',    url: '案例概况030100-170906.html'  }]}];

转换代码:

function createTreeByList(arr) {  const tree = [];  const stack = [];  arr.forEach(item => {    item.childs = []; // 初始化 childs 属性    while (stack.length > 0 && +stack[stack.length - 1].level >= +item.level) {      stack.pop();    }    if (stack.length === 0) {      tree.push(item);    } else {      stack[stack.length - 1].childs.push(item);    }    stack.push(item);  });  return tree;}const tree = createTreeByList(chapters);console.log(JSON.stringify(tree, null, 2)); // 输出树形结构

这段代码利用栈来跟踪父节点,高效地构建树形结构。 +item.level 将字符串类型的 level 转换为数字进行比较。 JSON.stringify 用于格式化输出,方便查看结果。

以上就是如何将扁平的章节数据转换为嵌套的树形结构?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/182916.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月1日 08:25:42
下一篇 2025年11月1日 08:26:46

相关推荐

发表回复

登录后才能评论
关注微信