Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中向筛选函数添加条件_Javascript_Filter - Fatal编程技术网

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

在Javascript中向筛选函数添加条件,javascript,filter,Javascript,Filter,我有一个名为filteredAnimals的对象数组,它返回给定过滤器中存在的动物 if (!dog.present) { filteredAnimals = filteredAnimals.filter( e => !e.animal_type.includes('Dog'), ); } if (!cat.present) { filteredAnimals = filteredAnimals.filter( e => !e

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

“Dog”
“Cat”
“fish”
是唯一要过滤的条件吗?为什么在
.includes()
后面有一个逗号
?哦,出于某种原因,我的代码工作了,但不应该在那里thanks@guest271314允许在参数列表中使用尾随逗号(样式很少见),所以我有一个问题,上面的代码不起作用。当狗不在场时,它应该表现出猫和鱼。但上面的过滤器将其设置为,如果dog不存在,则结果仅输出dogs。我认为这和&&Oh有关,这很有道理。非常感谢。