TypeScript Implements Conversion of Flat Structure Into Tree Structure
Need
To convert a given tiled array of Item
s into a tree-structured ITreeItem
, you can use a recursive approach to build the tree.
Code
Here is an example of a possible TypeScript implementation:
interface Item {
id: string;
name: string;
childrenId?: string[];
parentId?: string;
}
interface ITreeItem extends Item {
children?: ITreeItem[]
}
function buildMenuTree(items: Item[], parentId?: string): ITreeItem[] {
const tree: ITreeItem[] = [];
for (const item of items) {
if (item. parentId === parentId) {
const treeItem: ITreeItem = {
...item,
children: buildMenuTree(items, item.id)
};
tree. push(treeItem);
}
}
return tree;
}
const flatMenu: Item[] = [
{
"id": "1",
"name": 'vegetable'
},
{
"id": "2",
"name": 'fruit',
"childrenId": [
"3",
"4"
]
},
{
"id": "3",
"name": 'banana',
"parentId": "2"
},
{
"id": "4",
"name": 'apple',
"parentId": "2"
}
];
const menuTree: Item[] = buildMenuTree(flatMenu);
console.log(JSON.stringify(menuTree, null, 2)); // Output the menu tree structure
Paste the code into https://www.typescriptlang.org/play to try it out.
In this example, the buildMenuTree
function accepts a flat array of Item
and an optional parentId
parameter, and then recursively builds the tree structure. For each item, it checks if the item's parentId
matches the passed parentId
, and if so then adds the item to the current node's children
array.
You can put the sample data you provided into a flatMenu
array and then run the code and it will output a menuTree
of a tree structure. Please note that this is just a sample implementation and you can adjust it as needed.
Comments