Javascript:数组中的多个过滤器

Javascript:数组中的多个过滤器,javascript,html,arrays,filter,Javascript,Html,Arrays,Filter,我有一个项目数组,我希望用户能够使用多个下拉列表进行筛选。在这种情况下,字符串的每个字符都有自己的过滤器 我的问题是,一旦数组被过滤,我如何过滤它? i、 e.我的数组,部分,[“35X”,“45X”“35L”],如果我已经过滤到包含“3”的字符串,我如何过滤到包含3和L的字符串 var parts = [" 35X", " 35L", " X44", " 55L", " 55X"]; var obj8 = document.getElementById("selectOpera

我有一个项目数组,我希望用户能够使用多个下拉列表进行筛选。在这种情况下,字符串的每个字符都有自己的过滤器

我的问题是,一旦数组被过滤,我如何过滤它? i、 e.我的数组,部分,[“35X”,“45X”“35L”],如果我已经过滤到包含“3”的字符串,我如何过滤到包含3和L的字符串

    var parts = [" 35X", " 35L", " X44", " 55L", " 55X"];
    var obj8 = document.getElementById("selectOperators");
    var obj1 = document.getElementById("Series");

function getOption1() {
    var din = filterParts(obj1.options[obj1.selectedIndex].value)
    document.getElementById("other").innerHTML = din;
    }

function getOption8() {
    var ryan = filterParts(obj8.options[obj8.selectedIndex].value)
    document.getElementById("other").innerHTML = ryan;
    }

function filterParts(query) {
    return parts.filter((el) => el.toLowerCase().indexOf(query.toLowerCase()) > -1)
    } 

如果可能,不使用jquery

Array.prototype.filter
返回一个数组,这样您就可以基于许多谓词将后续的
.filter
调用链接到filter

const startsWith=s=>x=>
x、 substr(0,s.length)==s
常数endsWith=s=>x=>
x、 substr(-s.length)==s
常量数据=
['35X','45X','35L']
常数结果=
//链式过滤器调用,一个接一个
data.filter(startsWith('3'))/=>['35X','35L']
.filter(endsWith('L'))/=>['35L']
console.log(结果)

//['35L']
Array.prototype.filter
返回一个数组,因此您可以基于许多谓词将后续的
.filter
调用链接到filter

const startsWith=s=>x=>
x、 substr(0,s.length)==s
常数endsWith=s=>x=>
x、 substr(-s.length)==s
常量数据=
['35X','45X','35L']
常数结果=
//链式过滤器调用,一个接一个
data.filter(startsWith('3'))/=>['35X','35L']
.filter(endsWith('L'))/=>['35L']
console.log(结果)

//['35L']
我建议使用递归过滤函数

var arr, find, _findByQuery;

arr = [" 35X", " 35L", " X44", " 55L", " 55X"];

_findByQuery = function(query, a) {
  return a.filter(function(obj) {
    return obj.toLowerCase().indexOf(query) > -1;
  });
};

find = function(queries, a) {
  var q, rslt, _i, _len;
  rslt = a.slice();
  for (_i = 0, _len = queries.length; _i < _len; _i++) {
    q = queries[_i];
    rslt = _findByQuery(q, rslt);
  }
  return rslt;
};

这并不一定关心单个查询的位置,因为这需要更深入的UI来支持过滤选项

我建议使用递归过滤函数

var arr, find, _findByQuery;

arr = [" 35X", " 35L", " X44", " 55L", " 55X"];

_findByQuery = function(query, a) {
  return a.filter(function(obj) {
    return obj.toLowerCase().indexOf(query) > -1;
  });
};

find = function(queries, a) {
  var q, rslt, _i, _len;
  rslt = a.slice();
  for (_i = 0, _len = queries.length; _i < _len; _i++) {
    q = queries[_i];
    rslt = _findByQuery(q, rslt);
  }
  return rslt;
};

这并不一定关心单个查询的位置,因为这需要更深入的UI来支持过滤选项

parts.filter(part=>/^3.*L$/.test(part))
是根据“以3开头,以L结尾”进行筛选的方法。您可以按如下顺序进行筛选:
arr1.filter(filterAfunc.filter(filterfunc))
parts.filter(part=>/^3.*L$/.test(part))
是根据“以3开头,以L结尾”进行筛选的方法,您可以按如下顺序进行筛选:
arr1.filter(filterAfunc.filter(filterfunc))我认为我对问题的措辞可能对我想要的答案有点误导。我不希望实际按开始/结束字符过滤(因为我的实际项目包含10+个字符串)。我只是把这个问题编辑得更清楚一点,我道歉。我认为我的问题措辞可能对我想要的答案有点误导。我不希望实际按开始/结束字符过滤(因为我的实际项目包含10+个字符串)。我只是把问题修改得更清楚一点,抱歉。