【问题标题】:java script nested filter functionsjavascript嵌套过滤函数
【发布时间】:2019-05-23 09:08:06
【问题描述】:

我有一个名为restaurant_items 的数组。它有objects,这是餐厅的物品,每个对象都有一个array,称为in_menu,它还有objects

我想过滤属于特定menu_id 的餐厅项目。这意味着嵌套的过滤器函数。

我想传递 menu_id 3 并获得 Burger 和 Pizza 作为预期输出。

如何使用 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
	}
]
}]

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 非常感谢。甚至我以前从未听说过那个“某些”东西。 =)
    【解决方案2】:
    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);
    

    【讨论】:

      【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 2020-08-25
        • 1970-01-01
        • 2022-08-19
        • 2019-05-24
        • 1970-01-01
        • 1970-01-01
        • 2021-01-15
        • 2015-02-17
        • 1970-01-01
        相关资源
        最近更新 更多