网站域名301,马鞍山做公司网站的,龙岗坑梓网站建设,自己制作简单的小程序接前两篇博文#xff0c;最终方案终于定了#xff0c;也把之前做的编辑器模式给否决了#xff0c;原因是系统中有老的文档需要平替#xff0c;因此就不能通过编辑器这种模式了#xff0c;太麻烦了。 最终方案#xff1a;线下手动pandoc word转markdown#xff0c;然后将… 接前两篇博文最终方案终于定了也把之前做的编辑器模式给否决了原因是系统中有老的文档需要平替因此就不能通过编辑器这种模式了太麻烦了。 最终方案线下手动pandoc word转markdown然后将文档保存到前端图片也在对应路径下页面上菜单绑定文档文档中自动生成目录 issue
v-md-editor群里大佬提供了生成自定义锚点目录的方式但是是数组平铺的根据级别然后展示的时候通过距离形成视觉上的菜单但是需求模型上是菜单可点击收缩打开方式的因此需要调整该数组为树结构因为本人纯后端在朋友帮助下将数组转为了树
解决方法
//0 1 2 3 代表菜单级别
const target {titles: [{title:: 导读,lineIndex: 1,indent: 0},{title::功能范围,lineIndex:1,indent:1},{title::寻求帮助,lineIndex:1,indent:1},{title::业务功能介绍,lineIndex:1,indent:0},{title::1.二级标题,lineIndex:1,indent:1},{title::1.1 三级标题,lineIndex:1,indent:2},{title::1.1.1四级,lineIndex:1,indent:3},{title::1.2 san级,lineIndex:1,indent:2},{title::2.四3级,lineIndex:1,indent:1},{title::2.1四2级,lineIndex:1,indent:2}]
}function getTree(titles) {const res []let treeNodeList []let last nullfunction getParentNode(index) {let currentIndex index - 1while (!treeNodeList[currentIndex]) {currentIndex--}return treeNodeList[currentIndex]}for (let i 0, l titles.length; i l; i) {const item titles[i]if (item.indent 0) {res.push(item)treeNodeList []} else {// 父节点const currentParent getParentNode(item.indent)if (currentParent.children) {currentParent.children.push(item)} else {currentParent.children [item]}if (last.indent item.indent) {treeNodeList treeNodeList.splice(0, item.indent)}}// 把自己放到节点队列中treeNodeList[Number(item.indent)] itemlast item}return res
}console.log(JSON.stringify(getTree(target.titles)))
最终得到的转换后的结构 ps: 用后端逻辑开发前端真的是不好转换总想着先去定义对象结果根本没那么需要强弱类型的开发方式真的太不同了。