Добавление условия в функцию фильтра в Javascript - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть массив объектов с именем FilterAnimals, который возвращает животных, присутствующих в данном фильтре.

 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'),
    );
  }

Есть ли способ объединить это в один вызов?Я немного озадачен, потому что звонок не будет выполнен, если не будет выполнено условие.Я думал о создании функции, но я чувствую, что есть лучший способ сделать это.

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете использовать три условия:

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)
  ))
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...