描述
用js将下列数组转为树:
const arr = [
{
"id": 1,
"pid": 0,
"label": "label1"
},
{
"id": 2,
"pid": 1,
"label": "label2"
},
{
"id": 3,
"pid": 2,
"label": "label3"
},
{
"id": 4,
"pid": 1,
"label": "label4"
},
{
"id": 5,
"pid": 2,
"label": "label5"
},
{
"id": 6,
"pid": 4,
"label": "label6"
},
{
"id": 7,
"pid": 2,
"label": "label7"
},
{
"id": 8,
"pid": 3,
"label": "label8"
}
]
直接上代码吧:
function array2tree(arr, id, pid) {
const obj = {};
const result = [];
// 取数组id为对象key
for (let i = 0; i < arr.length; i++) {
obj[arr[i][id]] = arr[i];
}
for (let k = 0; k < arr.length; k++) {
if (obj[arr[k][pid]]) {
if (!obj[arr[k][pid]].children) {
obj[arr[k][pid]].children = [arr[k]];
} else {
obj[arr[k][pid]].children.push(arr[k]);
}
} else {
result.push(obj[arr[k][id]]);
}
}
return result;
}
array2tree(arr, 'id', 'pid');
输出结果:
[{
"id": 1,
"pid": 0,
"label": "label1",
"children": [{
"id": 2,
"pid": 1,
"label": "label2",
"children": [{
"id": 3,
"pid": 2,
"label": "label3",
"children": [{
"id": 8,
"pid": 3,
"label": "label8"
}]
}, {
"id": 5,
"pid": 2,
"label": "label5"
}, {
"id": 7,
"pid": 2,
"label": "label7"
}]
}, {
"id": 4,
"pid": 1,
"label": "label4",
"children": [{
"id": 6,
"pid": 4,
"label": "label6"
}]
}]
}]