java-скрипт вложенные функции фильтра - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть массив с именем 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
	}
]
}]

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018
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);
0 голосов
/ 24 декабря 2018

@ Ори предоставил хорошее решение.В конце добавляем одну последнюю карту, чтобы дать вам то, что вам нужно.

const getItem = (restaurant_items, inputId) => restaurant_items
    .filter(item => item.in_menu.some(menu_item => menu_item.id === inputId))
    .map(item => item.name);
0 голосов
/ 24 декабря 2018

Вы можете использовать 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.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...