js平铺数组转树

news/2024/7/10 0:07:31 标签: js, vue, elementui

js_0">js平铺数组转树

在这里插入图片描述

var data = [
      { id: "01", name: "张大大", pid: "", job: "项目经理" },
      { id: "02", name: "小亮", pid: "01", job: "产品leader" },
      { id: "03", name: "小美", pid: "01", job: "UIleader" },
      { id: "04", name: "老马", pid: "01", job: "技术leader" },
      { id: "05", name: "老王", pid: "01", job: "测试leader" },
      { id: "06", name: "老李", pid: "01", job: "运维leader" },
      { id: "07", name: "小丽", pid: "02", job: "产品经理" },
      { id: "08", name: "大光", pid: "02", job: "产品经理" },
      { id: "09", name: "小高", pid: "03", job: "UI设计师" },
      { id: "10", name: "小刘", pid: "04", job: "前端工程师" },
      { id: "11", name: "小华", pid: "04", job: "后端工程师" },
      { id: "12", name: "小李", pid: "04", job: "后端工程师" },
      { id: "13", name: "小赵", pid: "05", job: "测试工程师" },
      { id: "14", name: "小强", pid: "05", job: "测试工程师" },
      { id: "15", name: "小涛", pid: "06", job: "运维工程师" }
    ]

如果我们得到的是这样一个数组,想要通过tree组件显示在页面上,我们需要进行
转化结构,才可以渲染到页面上。

分析:
1.对象中的pid:对应的是父组件的id
2.封装一个函数

//将数组传进来
function tree(data){
	//先定义一个对象,保存后面需要用到的数据
		let map = {}
	//再定义一个数组,保存最后得到的大数组
		let arr = []
	//遍历数组,拿到每一个对象
		data.forEach(item=>{
	//将每一个对象的id作为属性名,属性值为遍历的每一个对象
		map[item.id] = item
		})
	//再次遍历数组
		data.forEach(item=>{
	//获取对象的pid,并且保存在一个变量中
		let parent = map[item.pid]
	//这里判断,如果parent为true,就将他push到对象的children属性下(这个children是自己定义的属性名)
	//如果没有,就直接添加到数组中去
		if(parent){
	//这里判断,parent.children如果有就直接添加,如果没有就创建数组添加
			parent.children || parent.children = []).push(item)
		}else{
			arr.push(item)
			}
		})
	//将数组返回出去
		return arr
			}
	console.log(tree(data))

最后得到的结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果有不足,或者更好的方法建议留言哦!!


http://www.niftyadmin.cn/n/1354797.html

相关文章

python 编写函数例子_Python 变量做函数名的简单示例

对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! PHP 有变量函数这一用法(见 http://www.php.net/manual/en/functions.variable-functions.php) 即有一字符串变量 现在想用这个变量的值做…

vue+element-ui 登录流程分析

登录流程分析 页面结构的搭建&#xff0c;样式的美化 <template> <el-form class"login-form":model"loginForm"auto-complete"on" //自动补全label-position"left"><!--手机号输入框 --><el-form-item><…

dockerfile arg_三、DockerFile 定制属于自己的专属镜像

前言上篇文章我们知道了怎么操作镜像和容器&#xff0c;到基础都是从已经存在的镜像开始的&#xff0c;那我们自己怎样搭建一个镜像并使用它呢&#xff1f;接下来就让我们学习使用dockerfile 创建属于自己的镜像吧。dockerfile在这之前&#xff0c;我们需要知道dockerfile ,因为…

js数组常用的一些方法

js数组常用的一些方法js数组常用的一些方法常用API- pop:删除数组的最后一个数(改变原数组)- push:添加到数组最后面(改变原数组)- shift:删除数组的第一个数(改变原数组)- unshift:添加到数组的最前面(改变原数组)- reverse:数组反转(改变原数组)- splice:可以向数组删除并加入…

python模块下载过程_Python引入多个模块及包的概念过程解析

实际开发中&#xff0c;一个大型的项目往往需要使用成百上千的 Python 模块&#xff0c;如果将这些模块都堆放在一起&#xff0c;势必不好管理。 而且&#xff0c;使用模块可以有效避免变量名或函数名重名引发的冲突&#xff0c;但是如果模块名重复怎么办呢&#xff1f; 因此&a…

装机后进不了bios_装机真的不难!保姆级装机教程小白都会

大家好&#xff0c;我是黄昏百分百&#xff0c;今天为大家带来的是最详细的台式机装机与做windows系统攻略。为了做这份攻略&#xff0c;装机的每一步我都拍摄了照片以及录制的动图&#xff0c;但是因为某些原因&#xff0c;我丢失了部分照片&#xff0c;所以部分静态照片来源于…

vue3的VueUse

第三方功能方法VueUse是什么安装useWindowScroll方法作用&#xff1a;使用窗口滚动&#xff0c;监听窗口的滚动距离&#xff0c;可以实现顶部吸顶效果用法useIntersectionObserver方法作用&#xff1a;检测目标元素的可见性&#xff0c;监听进入可视区域行为&#xff0c;可用于…

HTMLCSS面试题总结

HTMLCSS面试题总结HTML/CSS 清除浮动的方式为什么会出现浮动&#xff1f;为什么要清除浮动&#xff1f;清除浮动的方式实现垂直/水平方向居中position:fixed 相对于窗口的固定定位HTML/CSS 清除浮动的方式 为什么会出现浮动&#xff1f; 浮动&#xff1a;就是脱离文档流&…