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}
];
认定中:
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”的子项。所以我需要递归执行它。我怎样才能做到这一点?