创建不带任何父级的树结构通常指的是将一个扁平化的对象列表转换成一个树形结构,其中每个对象可能有一个或多个子对象,但没有父对象。这种结构通常用于表示层次关系,如组织结构、文件系统等。
假设我们有一个扁平化的对象列表如下:
const flatList = [
{ id: 1, name: 'A', parentId: null },
{ id: 2, name: 'B', parentId: 1 },
{ id: 3, name: 'C', parentId: 1 },
{ id: 4, name: 'D', parentId: 2 },
{ id: 5, name: 'E', parentId: 2 },
];
我们可以将其转换为树结构:
function buildTree(flatList) {
const map = {};
const roots = [];
// 初始化map
flatList.forEach(item => {
map[item.id] = { ...item, children: [] };
});
// 构建树结构
flatList.forEach(item => {
if (item.parentId === null) {
roots.push(map[item.id]);
} else {
map[item.parentId].children.push(map[item.id]);
}
});
return roots;
}
const tree = buildTree(flatList);
console.log(JSON.stringify(tree, null, 2));
function buildTree(flatList) {
const map = {};
const roots = [];
flatList.forEach(item => {
map[item.id] = { ...item, children: [] };
});
flatList.forEach(item => {
if (item.parentId === null) {
roots.push(map[item.id]);
} else {
if (map[item.parentId]) {
map[item.parentId].children.push(map[item.id]);
} else {
// 处理循环引用或无效的parentId
console.error(`Invalid parentId ${item.parentId} for item ${item.id}`);
}
}
});
return roots;
}
通过以上方法,你可以将一个扁平化的对象列表转换为树结构,并解决常见的相关问题。
领取专属 10元无门槛券
手把手带您无忧上云