У меня есть проблема, которая требует функции, которая может рекурсивно обходить вложенный массив объектов и фильтровать элементы в зависимости от того, присутствуют они в списке представлений или нет.
Например, с учетом списка:
[{
"label": "Heading",
"items": [{
"label": "Subheading",
"items": [{
"id": "item1_priv",
"label": "item1"
},
{
"id": "item_priv2",
"label": "item2"
},
{
"label": "Subheading",
"items": [{
"id": "item_priv3",
"label": "item3"
}]
}
]
}]
},
{
"label": "Heading2",
"items": [{
"label": "Subheading",
"items": [{
"id": "item_priv4",
"label": "item4"
},
{
"id": "item_priv5",
"label": "item5"
}
]
}]
}
]
и списка представлений:
canView = ['item1','item2','item4','item5']
Функция должна отфильтровать item3
в списке какего нет в canView
.
Я уже сделал функцию, которая делает это:
public filterView(list: any[]): any {
for (const item of list) {
if (item.items) {
item.items = this.filterView(item.items);
} else {
list = ((list.filter((i: any) => this.hasView(i.id))));
}
}
return list;
}
Однако, мой вопрос: возможно ли переписать эту функцию как лямбду?используя list.filter ()?Я новичок в Angular to и Typescript, поэтому мне тяжело оборачиваться, используя фильтр (или вложенные фильтры), чтобы пройти список, основываясь на том, есть ли в нем элементы.
мое предположениебудет функцией по линиям
list.filter(item => return(item.items && this.hasView(item.items.id)))
, но это не работает в списке с динамической глубиной.Любой совет был бы оценен, поскольку у других решений подобных проблем, которые я видел, были только списки с фиксированной глубиной.