js递归生成树形结构
情景一:返回的数据格式为array没有层级结构 靠pid关联 需要处理数据成树状结构
参考若依框架
/**
* 构造树型结构数据
* @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 || Math.min.apply(Math, data.map(item => { return item[parentId] })) || 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;
}
//const list=this.handleTree(response.data, "menuId");
情景二:
[
{
"id": 1,
"name": "11111111楼",
"parentId": 0
},
{
"id": 2,
"name": "2楼",
"parentId": 0
},
{
"id": 4,
"name": "1楼儿子2",
"parentId": 1
},
{
"id": 6,
"name": "你是谁啊",
"parentId": 4
},
{
"id": 12,
"name": "566666",
"parentId": 2
},
{
"id": 13,
"name": "33333楼",
"parentId": 0
},
{
"id": 14,
"name": "7567566765",
"parentId": 13
},
{
"id": 15,
"name": "1312",
"parentId": 6
}
]
load() {
loadCatOptions().then(res => {//发送请求获取数据
this.catOptions = this.generateOptions(res);
console.log(this.catOptions);
})
},
generateOptions(params) {//生成Cascader级联数据
var result = [];
for (let param of params) {
if (param.parentId == 0) {//判断是否为顶层节点
var parent = {//转换成el-Cascader可以识别的数据结构
'label': param.name,
'value': param.id
}
parent.children = this.getchilds(param.id, params);//获取子节点
result.push(parent);
}
}
return result;
},
getchilds(id, array) {
let childs = new Array();
for (let arr of array) {//循环获取子节点
if (arr.parentId == id) {
childs.push({
'label': arr.name,
'value': arr.id
});
}
}
for (let child of childs) {//获取子节点的子节点
let childscopy = this.getchilds(child.value, array);//递归获取子节点
console.log(childscopy)
if (childscopy.length > 0) {
child.children = childscopy;
}
}
return childs;
},
生成后:
[
{
"children": [
{
"children": [
{
"children": [
{
"label": "1312",
"value": 15
}
],
"label": "你是谁啊",
"value": 6
}
],
"label": "1楼儿子2",
"value": 4
}
],
"label": "11111111楼",
"value": 1
},
{
"children": [
{
"label": "566666",
"value": 12
}
],
"label": "2楼",
"value": 2
},
{
"children": [
{
"label": "7567566765",
"value": 14
}
],
"label": "33333楼",
"value": 13
}
]

浙公网安备 33010602011771号