输入:
[
{
id: 12,
parent_id: 1,
name: "朝阳区",
},
{
id: 241,
parent_id: 12,
name: "三元桥",
},
{
id: 13,
parent_id: 1,
name: "海淀",
},
{
id: 1,
parent_id: 0,
name: "北京市",
},
];
输出:
[
{
"id":1,
"parent_id":0,
"name":"北京市",
"children":[
{
"id":12,
"parent_id":1,
"name":"朝阳区",
"children":[
{
"id":241,
"parent_id":12,
"name":"三元桥",
"children":[]
}
]
},{
"id":13,
"parent_id":1,
"name":"海淀",
"children":[]
}
]
}
]
/**
* 将数组转换为树形结构
* @param {Array} arr - 输入的数组,每个元素包含id、parent_id和name属性
* @returns {Array} - 转换后的树形结构数组
*/
function toTreeArr(arr) {
// 初始化结果数组
const tree = [];
// 初始化映射对象,用于快速查找
const map = {};
// 遍历数组,将每个元素存储在映射中,并添加一个空的children数组
arr.forEach((item) => {
map[item.id] = { ...item, children: [] };
});
// 遍历映射,构建树形结构
Object.values(map).forEach((item) => {
// 如果当前元素的parent_id为0,则将其添加到结果数组中
if (item.parent_id === 0) {
tree.push(item);
} else {
// 否则,将其添加到父元素的children数组中
map[item.parent_id].children.push(item);
}
});
// 返回结果数组
return tree;
}