要将数组转换为树形结构,通常需要一个数组,其中每个元素都包含一个父节点的引用。以下是一个使用JavaScript实现的示例,假设每个元素都有一个唯一的 `id` 和一个指向其父元素的`parentId`
function arrayToTree(items) {
const rootItems = [];
const lookup = {};
for (const item of items) {
const itemId = item.id;
const parentId = item.parentId;
if (!lookup[itemId]) lookup[itemId] = { ['children']: [] };
lookup[itemId] = { ...item, children: lookup[itemId]['children'] };
const TreeItem = lookup[itemId];
if (parentId === null) {
rootItems.push(TreeItem);
} else {
if (!lookup[parentId]) lookup[parentId] = { ['children']: [] };
lookup[parentId].children.push(TreeItem);
}
}
return rootItems;
}
// 示例使用
const items = [
{ id: 1, parentId: null, name: "Root node" },
{ id: 2, parentId: 1, name: "Child node 1" },
{ id: 3, parentId: 1, name: "Child node 2" },
{ id: 4, parentId: 2, name: "Child node 1.1" }
];
const tree = arrayToTree(items);
console.log(tree);
这个函数首先创建一个查找表(lookup),用于存储每个节点及其子节点。然后,它遍历数组中的每个元素,将元素添加到其父节点的子节点数组中。如果父节点ID为null,则表示该节点是根节点。最后,返回包含所有根节点及其子节点的数组。