【发布时间】:2017-07-08 09:23:58
【问题描述】:
这是示例数据(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}
];
MenuModel的定义:
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);
}
});
它可以深入一步,但不能放置“test-item7”,因为它的父项(test-item6)也是“item1”的子项。所以我需要递归地做。我怎样才能做到这一点?
【问题讨论】:
标签: jquery angularjs recursion typescript