将一组扁平数据转换为树形的层级结构
<script>
// 将扁平数据转换为树形结构
function test(arr) {
// 将对象id和temp数组的下标对应起来
// 这样可以根据id准确找到某个对象
let temp = [];
for (let key of arr) {
temp[key.id] = key;
}
//保存树形结构
let res = [];
for (let val of temp) {
if (val) {
//判断该对象是否具有parentId属性,则需要给该对象的上级对象设置children属性
if (val.parentId) {
//判断是否具有children属性,没有则创建一个空数组
if (!temp[val.parentId].children) {
temp[val.parentId].children = [];
}
//将下级数据放入上级对象的children属性
temp[val.parentId].children.push(val);
} else {
//没有parentId属性的对象都为最外层对象
res.push(val);
}
}
}
console.log(res);
}
//测试数据
var arr = [{
id: 1,
name: "a1"
}, {
id: 2,
name: "a2",
parentId: 1
}, {
id: 3,
name: "a3"
}, {
id: 4,
name: "a4",
parentId: 2
}, {
id: 5,
name: "a5"
}, {
id: 6,
name: "a6",
parentId: 4
}]
test(arr);
</script>
打印结果