我有这个菜单和子菜单列表:
[
{
"NUA_ID_Menu": 1,
"TXT_Nom_Menu": "Menu 1",
"Liste_Sous_Menus": [
{
"TXT_Nom_Menu": "SubMenu 1",
"Liste_Direction_Menu": [
{
"NUA_ID_Direction": 2,
"TXT_Nom_Direction": "Direction A"
},
{
"NUA_ID_Direction": 4,
"TXT_Nom_Direction": "Direction C"
}
]
},
{
"TXT_Nom_Menu": "SubMenu 2",
"Liste_Direction_Menu": [
{
"NUA_ID_Direction": 4,
"TXT_Nom_Direction": "Direction C"
}
]
},
{
"TXT_Nom_Menu": "SubMenu 3",
"Liste_Direction_Menu": [
{
"NUA_ID_Direction": 3,
"TXT_Nom_Direction": "Direction B"
}
]
}
]
},
{
"NUA_ID_Menu": 2,
"TXT_Nom_Menu": "Menu 2",
"Liste_Sous_Menus": [
{
"TXT_Nom_Menu": "SubMenu 4",
"Liste_Direction_Menu": [
{
"NUA_ID_Direction": 2,
"TXT_Nom_Direction": "Direction A"
},
{
"NUA_ID_Direction": 3,
"TXT_Nom_Direction": "Direction B"
}
]
}
]
}
]
例如,我想过滤包含包含方向 C 的子菜单的菜单。 我想要这个结果,例如:
[
{
"NUA_ID_Menu": 1,
"TXT_Nom_Menu": "Menu 1",
"Liste_Sous_Menus": [
{
"TXT_Nom_Menu": "SubMenu 1",
"Liste_Direction_Menu": [
{
"NUA_ID_Direction": 2,
"TXT_Nom_Direction": "Direction A"
},
{
"NUA_ID_Direction": 4,
"TXT_Nom_Direction": "Direction C"
}
]
},
{
"TXT_Nom_Menu": "SubMenu 2",
"Liste_Direction_Menu": [
{
"NUA_ID_Direction": 4,
"TXT_Nom_Direction": "Direction C"
}
]
}
]
}
]
或者我想过滤带有一系列方向的子菜单的菜单
我试过了:
this.mesMenus=res.filter(menu=>{
return menu.Liste_Sous_Menus.filter(ssmenu=>{
return ssmenu.Liste_Direction_Menu.filter(direction=>{
return direction.NUA_ID_Direction==2;
}).length>0;
}).length>0;
});
还有
this.mesMenus = res.map(function(menu) {
menu.Liste_Sous_Menus = menu.Liste_Sous_Menus.map(function(ssmenu) {
ssmenu.Liste_Direction_Menu.filter(function(direction) {
return direction.NUA_ID_Direction==4;
});
return ssmenu;
});
return menu;
});
我可以过滤一个孩子(这有效)
const submenus = [ 6];
this.mesMenus =res.filter(d => d.Liste_Sous_Menus.every(c => submenus.includes(c.NUA_Id_Sous_Menu)));
但是我不能带着孙子!! 请你能帮帮我吗? 谢谢!
答案 0 :(得分:0)
你的问题有点误导。您想要减少菜单和子菜单,因此您需要进行减少,而不是过滤器。
不插入空的菜单并按方向过滤子菜单。
const directions = [4];
this.mesMenus = res.reduce((arr, cur) => {
const submenus = cur.Liste_Sous_Menus
.filter(dir => dir.Liste_Direction_Menu
.some(m => directions
.some(d => m.NUA_ID_Direction == d)));
if(submenus.length > 0) {
cur.Liste_Sous_Menus = submenus;
arr.push(cur);
}
return arr;
},[]);