Javascript json对象上的多个过滤器?
对于单个json对象,我有10个过滤器: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
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];
}