/**
* 把扁平数据转成树型结构数据(可以实现无限层级树形数据结构,只适用于单个表的数据)
* @param source 源数据
* @param id 对应id字段名称
* @param parentId 对应parentId字段名称
* @param children 对应children字段名称
*/
Vue.prototype.$treeDataFormat = function(source, id, parentId, children){
let cloneData = JSON.parse(JSON.stringify(source)); // 对源数据深度克隆
return cloneData.filter(father=>{ // 循环所有项,并添加children属性
let branchArr = cloneData.filter(child => father[id] == child[parentId]); // 返回每一项的子级数组
branchArr.length>0 ? father[children] = branchArr : '' //给父级添加一个children属性,并赋值
return father[parentId] == 0 // 如果第一层不是parentId=0,请自行修改
})
},
/**
* 把树型结构数据转成扁平数据(跟treeDataformat方法相反)
* @param newSource 新数据
* @param source 源数据
* @param children 子集字段名称
* @param name 名称字段名称(非必传) 用于导出返回数据名称显示树形
* @param lvl 等级(非必传) 用于导出返回数据名称显示树形
*/
Vue.prototype.$treeDataToCompressed= function(newSource,source,children,name,lvl) {
for (let i in source) {
if(name && lvl){
source[i][name] = (Array(lvl+1).join(" ") + source[i][name]).slice(-(source[i][name].length+lvl));
}
let cloneData = JSON.parse(JSON.stringify(source[i]));
delete cloneData[children];
newSource.push(cloneData);
if(source[i][children] && source[i][children].length > 0){
this.$treeDataToCompressed(newSource,source[i][children],children,name,lvl+1)
}
}
}
vue 树形数据和平面数据互转方法
最新推荐文章于 2023-06-09 09:00:00 发布
这篇博客介绍了两个Vue.js原型上的方法,用于数据转换。$treeDataFormat函数将扁平数据转换为无限层级的树形结构,而$treeDataToCompressed函数则将树形数据还原为扁平结构。这两个函数对于处理具有层级关系的数据非常有用,例如在组织结构、文件目录或菜单导航等场景。
摘要由CSDN通过智能技术生成