javaScript过滤嵌套对象和数组
我的用例是这样的javaScript过滤嵌套对象和数组,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我的用例是这样的 我有一个数组,它有一个对象 每个对象都有一个名为menu 菜单数组再次表示反对 每个对象都有一个数组dish\u有\u个类别 在dish\u has_categories数组中,如果有一个CategoryId等于8的对象,我想过滤掉该根对象 我的原始数据对象 const数据=[{ menuName:“热狗”, 菜单:[ { 迪希德:“1”, 菜肴有以下几类:[{ 类别ID:'8' }] }, { 迪希德:“2”, 菜肴有以下几类:[{ 分类:“9” }] }] }, { me
menu
dish\u有\u个类别
dish\u has_categories
数组中,如果有一个CategoryId等于8
的对象,我想过滤掉该根对象const数据=[{
menuName:“热狗”,
菜单:[
{
迪希德:“1”,
菜肴有以下几类:[{
类别ID:'8'
}]
},
{
迪希德:“2”,
菜肴有以下几类:[{
分类:“9”
}]
}]
},
{
menuName:“汉堡”,
菜单:[{
迪希德:“3”,
菜肴有以下几类:[{
类别ID:'6'
}]
}, {
迪希德:“4”,
菜肴有以下几类:[{
类别ID:'4'
}]
}]
},
{
名称:“饮料”,
菜单:[]
}
]
您可以使用嵌套
some()
方法测试数组中是否至少有一个元素通过了所提供函数实现的测试。它返回一个布尔值
const data=[{menuName:“热狗”,菜单:[{dishId:'1',菜有[u类:[{CategoryId:'8'}]},{dishId:'2',菜有[u类:[{CategoryId:'9'}]},{menuName:'Burgers],菜单:[{dishId:'3',dish:'u有[u类:[{CategoryId:'6'}},{dishId:'4',dish:'u有[u类:[{CategoryId:'4'},},{,菜单:[]]
const res=data.filter(x=>
x、 菜单。一些(y=>
y、 dish_有_类。一些(z=>z.CategoryId==='8')
)
);
console.log(res)
您可以使用和
这里嵌套的一些用于检查dish\u是否有任何类别CategoryId
等于'8'
,如果它是真的
,那么我们将在最终输出中包含该菜单,否则我们不会
const data=[{menuName:“热狗”,菜单:[{disid:'1',disu有以下类别:[{CategoryId:'8'}}},,{disid:'2',dis'u有一个类:[{CategoryId:'9'}},,{menuName:'burgs,,,,,{menuName:burgs,菜单:[{disdisid:'3',dis菜有以下类型:[{CategoryId:'6'}}},,{disid:'4',disid'4',dis菜的类型有如下类型:[{CategoryId:'4''d,'d'd'u有如下类别:[{CategoryId:'},{name:“饮料”,菜单:[]]
让op=data.filter(val=>{
让menu=val.menu.some({dish\u has\u categories})=>dish\u has\u categories.some({CategoryId})=>CategoryId=='8'))
返回菜单
})
console.log('筛选值-->\n',op)
让names=op.map(({menuName})=>menuName)
log('Names-->\n',Names)
您可以使用javascriptfilter()
和some()
some()
方法检查数组中的任何元素是否通过该函数
let data2 = data.filter(element => {
let menu = element.menu.some(({dish_has_categories}) => dish_has_categories.some(({CategoryId}) => CategoryId === '8'));
return menu;
});
console.log(data2);
谢谢。这管用!如果我想将此菜单名(“热狗”)推送到新的单独阵列。我在哪里可以做到这一点?@PathumSamarathna您想获取过滤值的名称还是所有值的名称?您可以简单地使用映射并仅从返回名称map@PathumSamararathna我还添加了在新数组中获取名称的示例,您可以查看:)总是很乐意提供帮助:)您好,请您解释一下,为什么要使用z.CategoryId=='8'
?8在这里是硬编码的。非常感谢。这管用!如果我想将此菜单名(“热狗”)推送到新的单独阵列。我在哪里可以做到这一点?@PathumSamararathna你可以使用map()
,因为我已经更新了它。@SyedMohamedAladeen,因为我问过)“在dish_中有_categories数组,如果有一个categorid等于8的对象,我想过滤掉那个根对象。”\n这回答了你的问题吗?