Вы можете использовать три условия:
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)
))
));