我有两个函数来过滤一个字符串数组。第一个函数根据长度过滤它,另一个函数根据它包含的字符过滤它。
字符串数组将在页面加载时加载。
如何使这个函数一起工作,所以当我根据数组所包含的字符过滤数组,并且我有适当的字符串时,稍后我应该按min值,它应该显示前一个筛选器中剩下的字符串。我不想再加载数组了。
这里我有第一个函数http://jsfiddle.net/arunpjohny/03avr1vh/2/
如何添加另一个,并使他们一起工作。
Myscript:
function filter() {
var a = document.getElementById('A').checked,
e = document.getElementById('E').checked,
o = document.getElementById('O').checked,
result2; //make a copy
result2 = animals.filter(function (value) {
value = value.toLowerCase();
return (!a || value.indexOf('a') == -1) && (!e || value.indexOf('e') == -1) && (!o || value.indexOf('o') == -1);
})
document.getElementById("demo").innerHTML = result2;
}
filter();发布于 2015-05-12 23:12:05
您可以在字母过滤器之后链接长度过滤器:
result2 = animals.filter(function (value) {
// letter filter
}).filter(function (value) {
// length filter
});快速取样。
发布于 2015-05-12 23:21:36
或者您可以使用一些函数式编程,对两个函数做一个咖喱,如下所示:
function compose(f1, f2)
{
return function(val) {
return f1(val)&&f2(val);
}
}
// in this case the .filter traverses the array only once,
// instead of twice, i.e once for each subfilter function
result2 = animals.filter(compose(letterFilter, lengthFilter));小提琴手例子
UPDATE如果理解正确,并且需要在以后再进行筛选(由另一个过滤器进行),则需要存储来自前一个过滤器的中间结果,并将其用作其他过滤器的输入,或者只需使用组合过滤器再次过滤整个数组(如本例中所示)。
最好的方法取决于数组的大小以及您希望实现的代码模块化和独立性。
https://stackoverflow.com/questions/30202746
复制相似问题