普通list集合
转为 树形集合
/**
* 普通list集合转成树形集合
* @param data list集合
* @param idField 子节点字段名
* @param parentField 父节点字段名
* @param topValue 最顶级父节点字段值(如 0 1 -1)
*/
parseTreeData(data, idField, parentField, topValue) {
var arr = [];
for (var i = 0, l = data.length; i < l; i++) {
var item = data[i];
if (item != null && item[parentField] === topValue) {
this.tranData(data, item, idField, parentField);
arr.push(item);
}
}
return arr;
},
tranData (data, parent, idField, parentField) {
var temp = [];
for (var i = 0, l = data.length; i < l; i++) {
var item = data[i];
if (item != null && item[parentField] == parent[idField]) {
this.tranData(data, item, idField, parentField);
temp.push(item);
}
}
if(temp.length>0){
parent["children"] = temp;
}
},
调用
var arr = this.common.parseTreeData(res.data, 'categoryCode', 'parentCode',null);
优化方法
/**
- 构造树型结构数据
- @param {*} data 数据源
- @param {*} id id字段 默认 ‘id’
- @param {*} parentId 父节点字段 默认 ‘parentId’
- @param {*} children 孩子节点字段 默认 ‘children’
- @param {*} rootId 根Id 默认 0
*/
export function handleTree(data, id, parentId, children, rootId) {
id = id || ‘id’
parentId = parentId || ‘parentId’
children = children || ‘children’
rootId = rootId || 0
//对源数据深度克隆
const cloneData = JSON.parse(JSON.stringify(data))
//循环所有项
const treeData = cloneData.filter(father => {
let branchArr = cloneData.filter(child => {
//返回每一项的子级数组
return father[id] === child[parentId]
});
branchArr.length > 0 ? father.children = branchArr : ‘’;
//返回第一层
return father[parentId] === rootId;
});
return treeData != ‘’ ? treeData : data;
}