У меня есть массивы фильтров, и мне нужно получить элементы, которые имеют эти фильтры в фильтрах элементов .fruit и veg, и мне нужно получить элементы, которые имеют оба фильтра. Как лучше фильтровать товары?
fruitfilter: [] = [{fruitname: "apple"} , {fruitname:"orange"}]
vegetablefilter: [] = [{vegetablename:"tomato"}, {vegetablename:"potato"}]
items: [] = [{fruitname: "apple", vegetablename:"tomato"},
{fruitname: "melon", vegetablename:"onion"},
{fruitname: "banana", vegetablename:"onion"}]
result: [] = [{fruitname: "apple", vegetablename:"tomato"}]
Эта платформа предназначена для того, чтобы помочь вам после того, как вы приложили все усилия. Поэтому, пожалуйста, попробуйте решить это самостоятельно и задайте вопрос, если вы застряли.
@DoğancanArabacı, я попробовал одно решение, в котором сначала фильтруются фрукты, а затем овощи, но иногда эти фильтры могут быть пустыми. не знаете, как справиться с этим?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто проверьте с includes. Вам нужно будет немного изменить типы данных для сравнения с массивом объектов — для этого предназначены fruit и vegitable:
const fruitfilter = [{fruitname: "apple"} , {fruitname:"orange"}];
const vegitablefilter = [{vegitablename:"tomato"}, {vegitablename:"potato"}];
const items = [{fruitname: "apple", vegitablename:"tomato"},{fruitname: "melon", vegitablename:"onion"},{fruitname: "banana", vegitablename:"onion"}];
const fruit = fruitfilter.map(({ fruitname }) => fruitname);
const vegitable = vegitablefilter.map(({ vegitablename }) => vegitablename);
const result = items.filter(item => item.fruitname ? fruit.includes(item.fruitname) : vegitable.includes(item.vegitablename));
console.info(result);Спасибо за быстрый ответ. Я получаю пустой массив, когда один из массивов фильтров пуст.
Вы можете использовать filter и some следующим образом:
const fruitfilter=[{fruitname:"apple"},{fruitname:"orange"}],
vegetablefilter=[{vegetablename:"tomato"},{vegetablename:"potato"}],
items=[{fruitname:"apple",vegetablename:"tomato"},{fruitname:"melon",vegetablename:"onion"},{fruitname:"banana",vegetablename:"onion"}];
const result =
items.filter(i => fruitfilter.some(f => f.fruitname === i.fruitname)
&& vegetablefilter.some(v => v.vegetablename === i.vegetablename))
console.info(result)Если фильтры могут быть пустыми, вы можете проверить, пусты ли они, используя length
const result =
items.filter(i => (!fruitfilter.length || fruitfilter.some(f => f.fruitname === i.fruitname))
&& (!vegetablefilter.length || vegetablefilter.some(v => v.vegetablename === i.vegetablename)))
Спасибо за быстрый ответ. Это решение не работает, когда один из фильтров пуст.
Что вы пробовали до сих пор?