我有一个名为filteredAnimals的对象数组,该数组返回给定过滤器中存在的动物。
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)
))
));