Javascript:数组中的多个过滤器
我有一个项目数组,我希望用户能够使用多个下拉列表进行筛选。在这种情况下,字符串的每个字符都有自己的过滤器 我的问题是,一旦数组被过滤,我如何过滤它? i、 e.我的数组,部分,[“35X”,“45X”“35L”],如果我已经过滤到包含“3”的字符串,我如何过滤到包含3和L的字符串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
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+个字符串)。我只是把问题修改得更清楚一点,抱歉。