javascript - 使用逻辑运算符和另一个数组过滤新数组
问题描述
我有一系列食物,各种对象代表每种食物的信息
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"]
然后将在过滤器函数中引用它以产生相同的结果。
我已经尝试了一些事情,例如构建一个字符串作为通过函数传递它,但是我在不使用||
数组的最终对象时遇到了问题。
我怎样才能成功地做到这一点?
解决方案
在 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)
推荐阅读
- flutter - 如何从 Scaffold 重构/提取底部导航栏?
- c# - 从 .NET Core 1 升级到 .NET 5 的 DbContext 问题
- ansible - 如何在 AWX extra-var 上正确转义双引号
- wrapper - 在gym中,我们应该如何实现环境的render方法,让Monitor产生的视频不黑?
- jsf - 在 JSF 中使用不同的输入值方法重用表单
- lua - 你如何做一个“范围”?在 Lua 中
- ruby-on-rails - 不要以 root 身份运行 Bundler - Elastic Beanstalk 上的 Rails6
- javascript - 等待元素没有类 - 然后其他元素在赛普拉斯中消失
- python - 读写模式 Python CSV 文件
- excel - Excel 导出为其他格式