IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JS 展开树形结构数据 -> 正文阅读

[JavaScript知识库]JS 展开树形结构数据

以下是原始数据结构

let data = [
			{
				id: 1, pid: 0, name: '顶级', children: [ // 1
					{
						id: 11, pid: 1, name: '一级目录-11', children: [ // 2
							{id: 111, pid: 11, name: '二级目录-111', children: [ // 3
								{id: 1111, pid: 111, name: '三级目录-1111'} // 4
							]}
						]
					}, {
						id: 21, pid: 1, name: '一级目录-21', children: [ // 5
							{id: 211, pid: 21, name: '二级目录-211', children: [ // 6
								{id: 2111, pid: 211, name: '三级目录-2111', children: [{ // 7
									id: 21111, pid: 2111, name: '四季目录-21111' // 8
								}, {
									id: 21112, pid: 2111, name: '三级目录-2112' // 9
								}]}
							]}
						]
					}
				]
			}
		]

想要的结果是,将这个树状结构的数据平铺

function treeToArr(data, pid=null, res) {
		  data.forEach(item => {
			res.push({ pid: pid, id: item.id, name: item.name });
			if(item.children && item.children.length !== 0) {
			  this.treeToArr(item.children, item.id, res);
			}
		  });
		  return res;
		}
let resArr = []
	treeToArr(data, 0, resArr)
	console.log(resArr, 'resArr')

最后得到的效果如下:

补充: 需求为,根据文件信息,得到 一个可复制的文件夹路径,并单独点击某一级能得到那一级的name

例如:顶级/一级目录-21/二级目录/三级目录/书本名称,

let book = {id: 9099, pid: 21111, name: '不知不知,不是灯红酒绿'}

		let arrRes = []
		function setItemtoArr (id, arrRes) {
			for (let i = 0; i <= resArr.length - 1; i++) {
				if (id == resArr[i].id) {
					arrRes.unshift(resArr[i])
					break;
				}
			}
			if (arrRes.length > 0 && arrRes[0].pid) {
				this.setItemtoArr(arrRes[0].pid, arrRes)
			}
		}
		setItemtoArr(book.pid, arrRes)
console.log(arrRes, 'arrRes')

?最后就可以通过这个数据等到想要的带有层级的效果啦

let result = arrRes.map(im => {
			return im.name
		})
		let r = result.join('/') + '/' + book.name
		console.log(r)

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:22:00  更:2022-02-26 11:22:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:31:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码