Javascript 同时使用多种类型的过滤器

Javascript 同时使用多种类型的过滤器,javascript,arrays,filter,Javascript,Arrays,Filter,我有几种不同的过滤器类型。过滤器类型为复选框、价格和选择选项。每个过滤器都可以单独工作。但我希望组过滤器可以工作。请帮助我的 let FlyList=[{ “id”:“1”, “航班号”:“961”, “type_票证”:“systemi”, “航空公司”:“ata”, “飞行时间”:“04:00”, “等级类型”:“经济型”, “价格”:“10000”, “容量”:“2”, }, { “id”:“2”, “航班号”:“960”, “type_票证”:“chartery”, “航空公司”:“航

我有几种不同的过滤器类型。过滤器类型为复选框、价格和选择选项。每个过滤器都可以单独工作。但我希望组过滤器可以工作。请帮助我的

let FlyList=[{
“id”:“1”,
“航班号”:“961”,
“type_票证”:“systemi”,
“航空公司”:“ata”,
“飞行时间”:“04:00”,
“等级类型”:“经济型”,
“价格”:“10000”,
“容量”:“2”,
}, {
“id”:“2”,
“航班号”:“960”,
“type_票证”:“chartery”,
“航空公司”:“航空旅行”,
“飞行时间”:“08:00”,
“类别类型”:“业务”,
“价格”:“20000”,
“容量”:“3”,
}, {
“id”:“3”,
“航班号”:“950”,
“type_票证”:“systemi”,
“航空公司”:“塔班”,
“飞行时间”:“11:00”,
“类别类型”:“业务”,
“价格”:“30000”,
“容量”:“5”,
},
];
让过滤器=新数组();
函数rangeSlider(){
$(“.range slider”).IonRange slider({
隐藏最小值最大值:对,
键盘:没错,
分:0,,
最高:150,
起:0,,
致:140,
类型:'double',
步骤:1,
前缀:“$”,
网格:是的,
onFinish:函数(数据){
var_price=filters.findIndex(item=>item.field=='price');
如果(_price!=-1)过滤器[_price]['value']=[data.from,data.to];
else addOrRemoveFilter('price',[data.from,data.to],true);
自定义过滤器();
//log(addOrRemoveFilter('price',[data.from,data.to],true));
}		
});
}
函数customFilter(){
让过滤的_列表=[];
FlyList.filter(项目=>{
filters.forEach(函数(el,i){
设_field=el['field'];
设_value=el['value'];
//console.log(_值);
if(typeof(_值)=='object'&&&u值.length){
if(parseInt(项[_字段])>=(parseInt(_值[0]*1000))&&parseInt(项[_字段])1{
让时间=毫秒(项[_字段]。拆分(':')[0],项[_字段]。拆分(':')[1])
设num1=毫秒(isMulti[0]。拆分(':')[0],isMulti[0]。拆分(':')[1]);
设num2=毫秒(isMulti[1]。拆分(':')[0],isMulti[1]。拆分(':')[1]);
如果(时间>=num1&&time复选框。addEventListener('change',(e)=>{
e、 预防默认值();
让filterTypeElement=findFilterTypeElement(即目标);
if(filterTypeElement){
let field=filterTypeElement.getAttribute('data-field');
设val=e.target.value;
addOrRemoveFilter(字段、val、e.target.选中);
自定义过滤器();
}
}));
document.getElementById('optionAll')。addEventListener('change',(e)=>{
e、 预防默认值();
让filterTypeElement=findFilterTypeElement(即目标);
if(filterTypeElement){
let field=filterTypeElement.getAttribute('data-field');
设val=e.target.value;
addOrRemoveFilter(字段、值、真);
对于(var index=0;index{
if(hasClass(项'filter_type')&&result==null){
结果=项目;
}
});
返回结果;
}
函数hasClass(元素,类名){
返回(“”+element.className+“”).indexOf(“”+className+“”)>-1;

}
您想要做的是在任何过滤器更新时调用一个函数。我会这样构造它(假设有一种方法使过滤器处于非活动状态):


请删除与问题不直接相关的任何内容(如滑块或
getParents()
),并尝试减少代码量(减少属性,删除不必要的空行等),以创建一个新的应用程序。
let filter1 = {
    isActive: () => {},
    passesFilter: item => {}
}

let filter2 = {
    isActive: () => {},
    passesFilter: item => {}
}

let filter3 = {
    isActive: () => {},
    passesFilter: item => {}
}

let filters = [filter1, filter2, filter3]

function passFilters(item) {
    return filters.every(filter => {
        if (!filter.isActive()) return true;
        return filter.passesFilter(item);
    })
}

function onFilterUpdate() {
    let itemsThatPass = items.filter(item => passFilters(item));
    // do something with itemsThatPass here
}