当前位置: 代码迷 >> JavaScript >> 在JavaScript中向过滤器功能添加条件
  详细解决方案

在JavaScript中向过滤器功能添加条件

热度:123   发布时间:2023-06-12 14:02:33.0

我有一个名为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'))
));

请注意,如果将dogcatfish放在一个较大的物体(例如animals会更好,这样您就可以遍历['Dog', 'Cat', 'fish']数组:

const finalFilteredAnimals = filteredAnimals.filter(({ animal_type }) => (
  ['Dog', 'Cat', 'fish'].every(animName => (
    animal[animName].present || !animal_type.includes(animName)
  ))
));
  相关解决方案