Java脚本嵌套过滤器功能

时间:2018-12-24 05:21:28

标签: javascript node.js vue.js ecmascript-6 vuejs2

我有一个名为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
	}
]
}]

3 个答案:

答案 0 :(得分:2)

您可以在过滤器内使用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)

答案 1 :(得分:0)

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);

答案 2 :(得分:0)

@Ori提供了很好的解决方案。最后添加一张地图,即可满足您的需求。

const getItem = (restaurant_items, inputId) => restaurant_items
    .filter(item => item.in_menu.some(menu_item => menu_item.id === inputId))
    .map(item => item.name);