代码之家  ›  专栏  ›  技术社区  ›  lost9123193

在javascript中向筛选函数添加条件

  •  2
  • lost9123193  · 技术社区  · 5 年前

    我有一个名为filteredanimal的对象数组,它返回给定过滤器中存在的动物。

     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 回复  |  直到 5 年前
        1
  •  3
  •   CertainPerformance    5 年前

    您可以使用三个条件:

    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)
      ))
    ));