65.js 对象转换为树形结构
js 对象转换为树形结构
题目
嵌请实现一个函数 convertToTree,将以下形式的数组对象转换为树形结构。
要求
TIP
- 输入数组对象中,每个对象包含 id、name 和 parentId 三个属性。id 是唯一标识,parentId 表示该对象的父级 id,parentId 为 null 表示该对象是根节点。
- 输出的树形结构中,每个节点对象除了原有的 id 和 name 属性外,还需要添加一个 children 属性,用于存储该节点的子节点数组。如果没有子节点,则 children 为[]。
- 请确保函数能够正确处理任意层级的嵌套关系,并且输出的树形结构是按照输入数组中对象的顺序构建的。
- 请使用 JavaScript 实现,并在代码中添加必要的注释,说明关键步骤和逻辑
示例
// 输入
const data = [
{ id: 1, name: "部门A", parentId: null },
{ id: 2, name: "部门B", parentId: null },
{ id: 3, name: "部门C", parentId: 1 },
{ id: 4, name: "部门D", parentId: 1 },
{ id: 5, name: "部门E", parentId: 2 },
{ id: 6, name: "部门F", parentId: 3 },
{ id: 7, name: "部门G", parentId: 3 },
];
// 输出
[
{
id: 1,
name: "部门A",
children: [
{
id: 3,
name: "部门C",
children: [
{ id: 6, name: "部门F" },
{ id: 7, name: "部门G" },
],
},
{ id: 4, name: "部门D" },
],
},
{
id: 2,
name: "部门B",
children: [{ id: 5, name: "部门E" }],
},
];
示例代码模版
<script>
function convertToTree(data) {
// 请在此处实现代码
}
// 测试用例
const data = [
{ id: 1, name: '部门A', parentId: null },
{ id: 2, name: '部门B', parentId: null },
{ id: 3, name: '部门C', parentId: 1 },
{ id: 4, name: '部门D', parentId: 1 },
{ id: 5, name: '部门E', parentId: 2 },
{ id: 6, name: '部门F', parentId: 3 },
{ id: 7, name: '部门G', parentId: 3 },
];
const result = convertToTree(data);
console.log(result);
</script>
参考答案
DETAILS
<script>
function convertToTree(data) {
// 创建一个映射表,用于快速查找每个节点
const nodeMap = {};
data.forEach((item) => {
nodeMap[item.id] = { id: item.id, name: item.name, children: [] }; // 为每个节点添加children属性
});
// 创建一个数组,用于存储根节点
const tree = [];
data.forEach((item) => {
if (item.parentId === null) {
// 如果parentId为null,说明是根节点,直接添加到tree数组中
tree.push(nodeMap[item.id]);
} else {
// 如果有parentId,说明是子节点,找到其父节点并添加到父节点的children数组中
const parent = nodeMap[item.parentId];
if (parent) {
parent.children.push(nodeMap[item.id]);
}
}
});
return tree;
}
// 测试用例
const data = [
{ id: 1, name: '部门A', parentId: null },
{ id: 2, name: '部门B', parentId: null },
{ id: 3, name: '部门C', parentId: 1 },
{ id: 4, name: '部门D', parentId: 1 },
{ id: 5, name: '部门E', parentId: 2 },
{ id: 6, name: '部门F', parentId: 3 },
{ id: 7, name: '部门G', parentId: 3 },
];
const result = convertToTree(data);
console.log(result);
</script>