在Javascript中向筛选函数添加条件
我有一个名为filteredAnimals的对象数组,它返回给定过滤器中存在的动物在Javascript中向筛选函数添加条件,javascript,filter,Javascript,Filter,我有一个名为filteredAnimals的对象数组,它返回给定过滤器中存在的动物 if (!dog.present) { filteredAnimals = filteredAnimals.filter( e => !e.animal_type.includes('Dog'), ); } if (!cat.present) { filteredAnimals = filteredAnimals.filter( e => !e
if (!dog.present) {
filteredAnimals = filteredAnimals.filter(
e => !e.animal_type.includes('Dog'),
);
}
if (!cat.present) {
filteredAnimals = filteredAnimals.filter(
e => !e.animal_type.includes('Cat'),
);
}
if (!fish.present) {
filteredAnimals = filteredAnimals.filter(
e => !e.animal_type.includes('fish'),
);
}
有没有一种方法可以将此合并到一个呼叫中?我有点为难,因为除非条件得到满足,否则不会打电话。我正在考虑创建一个函数,但我觉得有更好的方法来实现这一点。您可以使用三个条件:
const finalFilteredAnimals = filteredAnimals.filter(({ animal_type }) => (
(dog.present || !animal_type.includes('Dog')) &&
(cat.present || !animal_type.includes('Cat')) &&
(fish.present || !animal_type.includes('fish'))
));
请注意,如果dog
、cat
和fish
位于较大的对象(例如animals
)中,则会更好,这样您就可以迭代['dog'、'cat'、'fish']
数组:
const finalFilteredAnimals = filteredAnimals.filter(({ animal_type }) => (
['Dog', 'Cat', 'fish'].every(animName => (
animal[animName].present || !animal_type.includes(animName)
))
));
“Dog”
、“Cat”
和“fish”
是唯一要过滤的条件吗?为什么在.includes()
后面有一个逗号,
?哦,出于某种原因,我的代码工作了,但不应该在那里thanks@guest271314允许在参数列表中使用尾随逗号(样式很少见),所以我有一个问题,上面的代码不起作用。当狗不在场时,它应该表现出猫和鱼。但上面的过滤器将其设置为,如果dog不存在,则结果仅输出dogs。我认为这和&&Oh有关,这很有道理。非常感谢。