Javascript json对象上的多个过滤器?

Javascript json对象上的多个过滤器?,javascript,jquery,json,filter,Javascript,Jquery,Json,Filter,对于单个json对象,我有10个过滤器: var filtro1 = function(value, selecionado){ var data = JSON.parse(JSON.stringify(json.aPesquisa)); var result = data.filter(function(pesquisa){ ... }); return result; } var filtro2 = function(value, selec

对于单个json对象,我有10个过滤器:

var filtro1 = function(value, selecionado){
    var data = JSON.parse(JSON.stringify(json.aPesquisa));
    var result = data.filter(function(pesquisa){
        ...
    });
    return result;
}

var filtro2 = function(value, selecionado){
    var data = JSON.parse(JSON.stringify(json.aPesquisa));
    var result = data.filter(function(pesquisa){
        ...
    });
    return result;
}

var filtro3 = function(horamin, horamax){
    var data = JSON.parse(JSON.stringify(json.aPesquisa));
    var result = data.filter(function(pesquisa){
        ...
    });
    return result;
}

var filtro4 = function(value, selecionado){
    var data = JSON.parse(JSON.stringify(json.aPesquisa));
    var result = data.filter(function(pesquisa){
        ...
    });
    return result;
}
...
等等。正如您所看到的,每个过滤器都是单独工作的,即如果我使用filtro1进行过滤,然后再使用filtro2进行过滤,则只显示filtro2

有没有办法把这些过滤器组装起来

我考虑使用带有选定过滤器的阵列:

var filtros = ["filtro1, "filtro2", "filtro6", "filtro9", "filtro10"];
但我不能

一个想法,将过滤器连接起来

更多信息:

测试JSON:

{
  "aPesquisa":[
    {
      "trecho":[
        {
          "info":[
            {
              "cor":{
                "nm":"Laranja"
              },
              "dtPartida":"20170620 11:20",
              "dtChegada":"20170620 16:40",
              "hrDuracao":"03:20",
              "vTarifa":{
                "tarifa":{
                  "vlTotal":1969.17
                }
              }
            }
          ]
        },
        {
          "info":[
            {
              "cor":{
                "nm":"Vermelho"
              },
              "dtPartida":"20170620 11:20",
              "dtChegada":"20170620 16:40",
              "hrDuracao":"03:25",
              "vTarifa":{
                "tarifa":{
                  "vlTotal":769.90
                }
              }
            },
            {
              "cor":{
                "nm":"Vermelho"
              },
              "dtPartida":"20170620 11:20",
              "dtChegada":"20170620 16:40",
              "hrDuracao":"03:30",
              "vTarifa":{
                "tarifa":{
                  "vlTotal":2969.20
                }
              }
            },
            {
              "info":[
                {
                  "cor":{
                    "nm":"Azul"
                  },
                  "dtPartida":"20170620 11:20",
                  "dtChegada":"20170620 16:40",
                  "hrDuracao":"03:20",
                  "vTarifa":{
                    "tarifa":{
                      "vlTotal":669.17
                    }
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}
我的10个过滤器中的两个:

//DURATION FILTER
var filtroDuracao =  function(horamin, horamax)
{
  var data = JSON.parse(JSON.stringify(json.aPesquisa));
  var result = data.filter(function(item){
    var voos = item.trecho[0].info.filter(function(info){
      var time = horasParaMinutos(info.hrDuracao);
      return time >= horamin && time <= horamax;
    });
    item.trecho[0].voo = voos;
    return voos.length > 0;
  });
  return result;
};


// COLOR FILTER
var cores = [];
var filtroCor = function(value, selecionado){
  var sgv = value.split('|')[0];

  if (selecionado) {
    Array.prototype.push.apply(cias, json.aPesquisa.filter(function(pesquisa){
      var nm = pesquisa.trecho[0].info[0].cor.nm;
      return nm == sgv;
    }));
  } else {
    cias = cores.filter(function(pesquisa) {
      var nm = pesquisa.trecho[0].info[0].cor.nm;
      return nm != sgv;
    });
  }

  return cores;
}
幻灯片Ranger代码(JavaScript):

horasParaMinutos
功能将小时转换为分钟:

var horasParaMinutos = function (str) {
  var horas = str.split(':').map(Number);
  return horas[0] * 60 + horas[1];
}
我的一个疑问是:


我有一个选择了3的持续时间复选框列表,我选择了一个颜色复选框。如何获取要筛选的持续时间和颜色复选框?

您可以将筛选函数与数组中的绑定参数一起使用,并应用reduce

var数组=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],
过滤器1=功能(左、右、项){
返回项>=左侧&项a.filter(fn),数组);

console.log(result);
JSON.parse(JSON.stringify(JSON.aPesquisa));
..?您可以在第一个实例中使用
JSON.aPesquisa
请添加一个示例,说明整个过滤是如何工作的。至少您需要存储每个函数的两个参数。@rorymcrossan是的,我使用了
JSON.parse(JSON.stringify)(json.Lookup));
.filter`被替换为
json.aLookup
返回null`[]`@NinaScholz我更新了问题
$("#duracao-range").slider({
            range: true,
            min: 0,
            max: 1440, //1440 / 60 = 24
            step: 15,
            values: [0, 1439],
            slide: function(event, ui) {
                //Mínimo
                //calcula as horas, exemplo: 125 / 60 = 2,083, arredonda para 2
                var hoursMin = Math.floor(ui.values[0] / 60);
                //calcula os minutos, exemplo: 125 - 2 * 60 = 5
                //No final terá horas = 2 e minutos = 5
                var minutesMin = ui.values[0] - (hoursMin * 60); //restante são os minutos
                //acrescenta o zero a esquerda se houver apenas 1 digito, 1 = 01, 2 = 02 e etc...
                if (hoursMin.toString().length == 1) hoursMin = '0' + hoursMin;
                if (minutesMin.toString().length == 1) minutesMin = '0' + minutesMin;
                $(".min-duracao-label").html(hoursMin + ':' + minutesMin);
                //Máximo
                var hoursMax = Math.floor(ui.values[1] / 60);
                var minutesMax = ui.values[1] - (hoursMax * 60);
                if (hoursMax.toString().length == 1) hoursMax = '0' + hoursMax;
                if (minutesMax.toString().length == 1) minutesMax = '0' + minutesMax;
                $(".max-duracao-label").html(hoursMax + ':' + minutesMax);

               var horaminida= horasParaMinutos(hoursMin + ':' + minutesMin));
               var horamaxida= horasParaMinutos(hoursMax + ':' + minutesMax));
               filtroDuracao(horaminida, horamaxida);

            }
        });
var horasParaMinutos = function (str) {
  var horas = str.split(':').map(Number);
  return horas[0] * 60 + horas[1];
}