我有过滤器数组,需要获取在项目.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"}]
答案 0 :(得分:0)
只需检查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.log(result);
答案 1 :(得分:0)
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.log(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)))