У меня есть массив под названием 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 [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать Array.some() внутри фильтра, чтобы получить элементы с указанным идентификатором меню:
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.info(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);
Большое спасибо. Даже я никогда раньше не слышал этого "чего-то". знак равно