0
これはサンプルデータ(MenuModelの配列)です。 MenuModelの再帰関数を使用してリストを作成する方法
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:
export interface IMenuModel{
Id:number
itemName:string;
parentId?:number;
childItems?:IMenuModel[];
}
コードは以下のとおりである
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);
}
});
それは一歩深いのために動作しますが、カントの場所 "テストitem7"、その親(試験 - item6)も "item1"の子です。私は再帰的にそれを行う必要があります。どうすればこれを達成できますか?