0
Dies sind die Beispieldaten (Array von MenuModel);Erstellen einer Liste mit rekursiver Funktion
this.menuItems = [
{Id:1, itemName:'test-item1'},
{Id:2, itemName:'test-item2'},
{Id:3, itemName:'test-item3'},
{Id:4, itemName:'test-item4',parentId:1},
{Id:5, itemName:'test-item5',parentId:2},
{Id:6, itemName:'test-item6',parentId:1},
{Id:7, itemName:'test-item7',parentId:6}
];
Defination von MenuModel:
export interface IMenuModel{
Id:number
itemName:string;
parentId?:number;
childItems?:IMenuModel[];
}
-Code wird wie folgt
var tempItems = this.menuItems;
var itemsConstructed: IMenuModel[] = [];
tempItems.map((item: IMenuModel, i: number) => {
var newItem: IMenuModel = { Id: item.Id, itemName: item.itemName, parentId: item.parentId, childItems: [] };
var isInList: boolean = false;
itemsConstructed.map((item_: IMenuModel) => {
if (item_.Id == newItem.parentId) {
item_.childItems ? item_.childItems.push(newItem) : [newItem];
isInList = true;
}
});
if (!isInList) {
itemsConstructed.push(newItem);
}
});
Es funktioniert für einen Schritt tief, aber kippe Ort "test-item7", weil seine Eltern (test- item6) ist auch Kind von "item1". also muss ich es rekursiv tun. Wie kann ich das erreichen?