Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 - Fatal编程技术网

Javascript 对同一数据应用多个过滤器

Javascript 对同一数据应用多个过滤器,javascript,Javascript,我从json文件中读取了大量数据 我需要实现一些过滤器,根据检查的过滤器返回正确的数据 我正在使用react和redux以及-并且studyData来自复选框或下拉列表 什么是最好的过滤方法,使过滤器能够很好地协同工作 目前,它们单独工作,但当您与其他人一起使用时,它们会断开 这是我的密码: function filterStudies(studyData){ let searchTerm = studyData.searchTerm === undefined ? '' : stud

我从json文件中读取了大量数据

我需要实现一些过滤器,根据检查的过滤器返回正确的数据

我正在使用react和redux以及-并且studyData来自复选框或下拉列表

什么是最好的过滤方法,使过滤器能够很好地协同工作

目前,它们单独工作,但当您与其他人一起使用时,它们会断开

这是我的密码:

function filterStudies(studyData){
  let searchTerm = studyData.searchTerm  === undefined  ? '' :  studyData.searchTerm;
  let studies = studyData.studies.filter((val)=> val.name.toUpperCase().includes(searchTerm.toUpperCase()));

  if(typeof(studyData.isLive) !== 'undefined'){
    studies = studyData.isLive ? studies.filter((val) => val.live === studyData.isLive) : studyData.studies;
  }
  if(typeof(studyData.isCompleted) !== 'undefined'){
    studies = studyData.isCompleted ? studies.filter((val) => val.completed === studyData.isCompleted) : studyData.studies;
  }
  if(typeof(studyData.media) !== 'undefined'){
    studies = studyData.media === 'All' ? studyData.studies : studies.filter((val) =>  val.media === studyData.media);
  }
  if(typeof(studyData.environment) !== 'undefined'){
    studies = studyData.media === 'All' ? studyData.studies : studies.filter((val) =>  val.environment === studyData.environment);
  }
  return studies;
}

我不确定我是否理解你

但无论如何,乍一看,我认为您最后的
if
应该是:

if(typeof(studyData.environment) !== 'undefined'){
    studies = studyData.environment === 'All' ? studyData.studies : studies.filter((val) =>  val.environment === studyData.environment);
}
而不是:

if(typeof(studyData.environment) !== 'undefined'){
    studies = studyData.media === 'All' ? studyData.studies : studies.filter((val) =>  val.environment === studyData.environment);
}
顺便说一句,我建议您简化代码,依靠单个过滤器来决定哪些项目应该保留,哪些项目应该丢弃

作为一个例子(我不明白到底是什么假装做你的代码,所以我的代码很难做),但我希望它可以作为一个例子:

function filterStudies(studyData){
    let searchTerm = studyData.searchTerm  === undefined  ? '' :  studyData.searchTerm;
    let studies = studyData.studies.filter(function(val) {
        if (val.name.toUpperCase().includes(searchTerm.toUpperCase())) return true;
        if (val.live === studyData.isLive) return true;
        if (val.completed === studyData.isCompleted) return true;
        if (studyData.media === 'All' || val.media === studyData.media) return true;
        if (studyData.environment === 'All' || val.environment === studyData.environment) return true;
        return false;
    });

    return studies;
}
注意:显然,这些“如果”可以组合成单个(它们执行“或”)。我试图提供一个尽可能接近的例子 但是,事实上,这种方式会更有效 不管怎样,还是可读的


你想缩小你的代码还是别的什么?从您的问题中不太清楚您总是覆盖
studies=…
我只需要返回应用了所有筛选器的新studyData数组。基本上,您如何让筛选器一起工作而不是单独工作。这取决于您希望您的筛选器是或是。如果您选中了
isCompleted
media
,您希望使用
isCompleted和media
,还是
isCompleted或media
?目前它是一个数组,虽然我需要返回它-基本上它返回一个表的过滤数据