我有一个名为restaurant_items
的数组。它有objects
哪些是餐厅的项目,每个对象都有一个叫做in_menu array
它也有objects
.
我想过滤属于特定menu_id
的餐厅项目。这意味着嵌套过滤器函数。
我想通过 menu_id 3 并按预期输出获得汉堡和比萨饼项目。
如何使用 java 脚本过滤器实现此目的?
const restaurant_items = [
{
name:"Burger",
in_menu:[{
id:1,menu_id:3
},{
id:2,menu_id:5
}
]
},
{
name:"Pizza",
in_menu:[{
id:1,menu_id:3
},{
id:3,menu_id:9
}
]
},
{
name:"Donuts",
in_menu:[{
id:8,menu_id:6
},{
id:4,menu_id:8
}
]
}]
您可以使用
过滤器中的Array.some()
来获取具有指定菜单 ID 的项目:
const restaurant_items = [{"name":"Burger","in_menu":[{"id":1,"menu_id":3},{"id":2,"menu_id":5}]},{"name":"Pizza","in_menu":[{"id":1,"menu_id":3},{"id":3,"menu_id":9}]},{"name":"Donuts","in_menu":[{"id":8,"menu_id":6},{"id":4,"menu_id":8}]}]
const filterByMenuId = (menuId) =>
restaurant_items.filter(item => item.in_menu.some(o => o.menu_id === menuId))
const result = filterByMenuId(3)
console.log(result)
function filter(restaurant_items, menu_id) {
return restaurant_items.filter(function(item) {
var index = item.in_menu.findIndex(function(item2) {
return item2.menu_id === menu_id;
});
return index !== -1;
});
}
用法:
var filtered_items = filter(restaurant_items, 3);
@Ori提供了很好的解决方案。最后添加最后一张地图,只给你你需要的东西。
const getItem = (restaurant_items, inputId) => restaurant_items
.filter(item => item.in_menu.some(menu_item => menu_item.id === inputId))
.map(item => item.name);