首页 > 解决方案 > 使用逻辑运算符和另一个数组过滤新数组

问题描述

我有一系列食物,各种对象代表每种食物的信息

var Food = {
    ["Apple","Green","Fruit"],
    ["Basil","Green","Herb"],
    ["Tomato","Red","Fruit"],
    ["Carrot","Orange","Vegetable"],
    ["Zucchini","Green","Vegetable"]
}

我可以使用该filter函数将此数组过滤成一个新数组。

var newArray = Food.filter(function (el) {
  return el[2] == "Fruit" || 
         el[2] == "Vegetable" ||
});

正如预期的那样,这会产生一个新数组,其中包含水果和蔬菜。

但是,我想使用带有or逻辑运算符的单独数组作为过滤标准。

例如我会有一个这样的数组:

var filters = ["Fruit","Vegetable"]

然后将在过滤器函数中引用它以产生相同的结果。

我已经尝试了一些事情,例如构建一个字符串作为通过函数传递它,但是我在不使用||数组的最终对象时遇到了问题。

我怎样才能成功地做到这一点?

标签: javascript

解决方案


在 filter() 中使用 Array#some()。

对于 AND 条件使用every(),而不是some()

var Food = [
    ["Apple","Green","Fruit"],
    ["Basil","Green","Herb"],
    ["Tomato","Red","Fruit"],
    ["Carrot","Orange","Vegetable"],
    ["Zucchini","Green","Vegetable"]
]

var filters = ["Fruit","Vegetable"];

var newArray = Food.filter(el => filters.some(f => el.includes(f)));
 
console.log(newArray)


推荐阅读