js/elementui 树形结构数据转化(后台平铺返回)

news/2024/7/10 1:23:21 标签: vue, javascript

js/elementui 树形结构数据转化(后台平铺返回)

// 后端返回格式
var data = [
	{"id":2,"name":"aaa","pid":null},
	{"id":3,"name":"bbb","pid":2},
	{"id":5,"name":"ccc","pid":2},
	{"id":100,"name":"ddd","pid":2},
	{"id":6,"name":"eee","pid":2},
	{"id":601,"name":"fff","pid":6},
	{"id":602,"name":"ggg","pid":6},
]
// 而你期望得到的数据结构
 data: [{
          name: 'aaa',
          id: 2,
          pid: null
          children: [{ // 二级
            name: 'bbb',
            id: 3,
         	 pid: 2
          },{
          	name: 'ccc',
            id: 5,
         	 pid: 2
          },{
          	name: 'ddd',
            id: 100,
         	 pid: 2
          },{
            name: 'eee',
            id: 6,
         	 pid: 2
         	 children: [{ // 三级
	             name: 'fff',
	             id: 601,
	         	  pid: 6
	            },{
	            	name: 'ggg',
	                id: 602,
	         	    pid: 6
	            }]
          }]
 }]

转换方法例子如下

javascript">// 树形数据转化 (封装公共方法 我这是在vue里写的)
// data 原数组, id 子id, pid 父id
export function treeDataTranslate (data,id = 'pid', pid='parentId') {
	var res = []
	var temp = {}
	for(var i = 0; i < data.length; i++){
		temp[data[i][id]] = data[i]
	}
	for (var k = 0; k <data.length; k++) {
		if (temp[data[k][pid]] && data[[k][id]] !== data[k][pid]) {
			if (!temp[data[k][pid]]['children']) {
				temp[data[k][pid]]['children'] = []
			}
			if (!temp[data[k][pid]]['_level']) {
				temp[data[k][pid]]['_level'] = 1
			}
			data[k]['_level'] = temp[data[k][pid]]._level + 1
			temp[data[k][pid]]['children'].push(data[k])
		} else {
			res.push(data[k])
		}
	}
	return res
}

vue引入

javascript">// vue中引入
import {treeDataTranslate} from 'xxxx'

页面使用截取代码片段

javascript">// 使用
treeDataTranslate(res.data,'id','pid')

如果你使用了ele-ui 需要注意一些问题

javascript">// tree组件
<el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick" @check="handleChange"></el-tree>
// defaultProps 需要根据返回字段做些修改
// 我就以上面所给的数据作为例子 在vue data里面定义一下
defaultProps: {
	children: 'children',
	 lable: 'name'
}

创作不易需要鼓励,觉得有点帮助的话帮我点个赞吧!!!


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

相关文章

SVN版本冲突解决详解

版本冲突原因&#xff1a; 假设A、B两个用户都在版本号为100的时候&#xff0c;更新了kingtuns.txt这个文件&#xff0c;A用户在修改完成之后提交kingtuns.txt到服务器&#xff0c;这个时候提交成功&#xff0c;这个时候kingtuns.txt文件的版本号已经变成101了。同时B用户在版…

vue空格集合

在开发的时候很多时候需要很多间隔 这时候就要用到空格 下面总结一下vue中可以使用的空格 1、&#32 &#xff08;普通的英文半角空格&#xff09; 2、&#160&#xff08;普通的英文半角空格但不换行&#xff09; 3、&#12288 中文全角空格 &#xff08;一个中文宽度…

过滤两个数组并取出不同/相同项(vue/filter)

话不多说 直接上干货内联代码片。 // 数组A let arrA [1111,2222,333,4444,5555] // 数组B let arrB [aaa,bbb,4444,5555,dddd,eeee,ffff,yyyy,mmmm] 过滤B数组中不包含A数组的项 let differentArr arrB.filter(item > arrA.indexOf(item) > -1) // differentArr [aaa…

elementui 表格单选以及如何将element Radio组件label绑定的值不显示

如果你想要实现如下的效果图就看看 或许对你有帮助 详情请看如下代码 下面展示一些 内联代码片。 // 表格部分代码<el-table:data"operList"fitshow-headerstyle"width: 100%"><el-table-column label"选择" width"50">…

element ui中select 下拉框在火狐浏览器最后一行显示不完全(谷歌正常)

在项目开发的时候用到了el-scrollbar组件 并且设置了隐藏横向滚动条 下面展示一些 内联代码片。 // 隐藏横向滚动条 .el-scrollbar__wrap {overflow-x: hidden; } // 竖向 .el-scrollbar__bar.is-horizontal {height: 0 !important; }因为有以上设置 所以导致在火狐浏览器的时…

关于css中的/deep/的用法(修改elementui库的css但是不影响全局)

在项目中我们经常会用到Less或者Sass 。其中Scoped CSS规范是Web组件产生不污染其他组件&#xff0c;也不被其他组件污染的CSS规范。以elementui库为例 如果我们想修改某一个输入框的长度 但是不想影响全局 这时候就体现了/deep/的重要性 下面展示一些 内联代码片。 // 修改输…

vue根据屏幕大小设置css样式(实时监控屏幕大小)

pc端当屏幕缩小时总会有些css样式不适配 以下代码可以实时监测屏幕大小 下面展示一些 内联代码片。 // 需要动态修改的css <div :class"isWidth ? title : title2">11111</div>// 定义一个变量 return {data(){screenWidth:document.body.clientWidth…

vue v-for循环出来的数组加不同的颜色(颜色循环)

上面方块是由后端返回的数组 需求是每四个方块循环不同的背景颜色 下面展示一些 内联代码片。 // 具体v-for的代码块 <div v-for"(item, index) in appList" :key"index"><span :style"{background:item.color}"></span> //…