让一个函数在Javascript中处理另一个函数
我有两个过滤字符串数组的函数。第一个函数根据长度对其进行过滤,另一个函数根据其包含的字符进行过滤 字符串数组在页面加载时加载 如何使这些函数协同工作,因此,当我根据数组包含的字符过滤数组时,我有适当的字符串,稍后我应该按min值,它应该显示上一个过滤器中的剩余字符串。我不想再次加载数组 这里有第一个函数 如何添加另一个并使它们一起工作 Myscript:让一个函数在Javascript中处理另一个函数,javascript,arrays,Javascript,Arrays,我有两个过滤字符串数组的函数。第一个函数根据长度对其进行过滤,另一个函数根据其包含的字符进行过滤 字符串数组在页面加载时加载 如何使这些函数协同工作,因此,当我根据数组包含的字符过滤数组时,我有适当的字符串,稍后我应该按min值,它应该显示上一个过滤器中的剩余字符串。我不想再次加载数组 这里有第一个函数 如何添加另一个并使它们一起工作 Myscript: function filter() { var a = document.getElementById('A').checked,
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();
可以在字母过滤器之后链接长度过滤器:
result2 = animals.filter(function (value) {
// letter filter
}).filter(function (value) {
// length filter
});
.您可以在字母过滤器之后链接长度过滤器:
result2 = animals.filter(function (value) {
// letter filter
}).filter(function (value) {
// length filter
});
.您可以在字母过滤器之后链接长度过滤器:
result2 = animals.filter(function (value) {
// letter filter
}).filter(function (value) {
// length filter
});
.您可以在字母过滤器之后链接长度过滤器:
result2 = animals.filter(function (value) {
// letter filter
}).filter(function (value) {
// length filter
});
.或者您可以使用一些函数式编程,并执行以下两个函数:
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));
更新如果正确理解,并且以后需要再次过滤(由另一个过滤器过滤),则需要存储来自前一个过滤器的中间结果,并将其用作另一个过滤器的输入,或者仅使用组合过滤器再次过滤整个数组(如本例所示)
最好的方法取决于数组的大小以及您希望实现的代码模块化和独立性。或者您可以使用一些函数编程并执行以下两种函数:
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));
更新如果正确理解,并且以后需要再次过滤(由另一个过滤器过滤),则需要存储来自前一个过滤器的中间结果,并将其用作另一个过滤器的输入,或者仅使用组合过滤器再次过滤整个数组(如本例所示)
最好的方法取决于数组的大小以及您希望实现的代码模块化和独立性。或者您可以使用一些函数编程并执行以下两种函数:
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));
更新如果正确理解,并且以后需要再次过滤(由另一个过滤器过滤),则需要存储来自前一个过滤器的中间结果,并将其用作另一个过滤器的输入,或者仅使用组合过滤器再次过滤整个数组(如本例所示)
最好的方法取决于数组的大小以及您希望实现的代码模块化和独立性。或者您可以使用一些函数编程并执行以下两种函数:
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));
更新如果正确理解,并且以后需要再次过滤(由另一个过滤器过滤),则需要存储来自前一个过滤器的中间结果,并将其用作另一个过滤器的输入,或者仅使用组合过滤器再次过滤整个数组(如本例所示)
最佳方法取决于数组的大小以及您希望实现的代码模块化和独立性。
在为自己构建了一个小FP库之后,您可以用声明的方式编写过滤器
var animals = ["Bear", "Mouse", "Cat", "Tiger", "Lion"];
var letters = ["A", "E", "O"];
function showAnimals() {
var getSwitches = compose([
map(prop("value")),
filter(prop("checked")),
map(getElementById)
]);
var switches = getSwitches(letters);
var _filter = compose([
map(join("")),
filter(compose([
not,
any(flip(elem)(switches)),
map(toUpperCase)
])),
map(split(""))
]);
var result = _filter(animals);
getElementById("demo").innerHTML = join(", ")(result);
};
你的两项主要行动是:
字母调用getElementById
值
开关
- 将动物转换成大写
- 动物不应与任何
开关匹配
result
好的,我们用了很多函数。我不打算详细介绍每一个,但大多数FP LIB都会为您提供这些基础知识。我将从零开始构建其中的一些 在我们继续之前 “是表演吗?” 是的,但是和什么相比呢?如果您编写一个
映射
或过滤器
lambda,您可能能够更快地处理相同的信息
“这么说这很慢?”
不,但只有你能做出判断。它仍然会在很短的时间内找到答案,所以对我来说速度非常快
“为什么这样更好?”
首先,它更具声明性。也就是说,我们告诉计算机我们想要什么,而不一定告诉它如何给我们答案。后者是一种更具强制性的风格
设置变量、调用循环等都在告诉计算机如何完成它的工作。命令式风格并不坏,只是当它变得过于冗长时,它可能会变得不好
注意,我们可以通过定义两个变量来解决这个问题:开关
和结果
。其他一切都只是一个函数
关于更多信息,我鼓励你阅读我上面链接的另一个答案
对于那些感兴趣的人,这里是我用来使上述解决方案工作的函数
就这些,伙计们
在为自己构建了一个小FP库之后,您可以用声明的方式编写过滤器
var animals = ["Bear", "Mouse", "Cat", "Tiger", "Lion"];
var letters = ["A", "E", "O"];
function showAnimals() {
var getSwitches = compose([
map(prop("value")),
filter(prop("checked")),
map(getElementById)
]);
var switches = getSwitches(letters);
var _filter = compose([
map(join("")),
filter(compose([
not,
any(flip(elem)(switches)),
map(toUpperCase)
])),
map(split(""))
]);
var result = _filter(animals);
getElementById("demo").innerHTML = join(", ")(result);
};
你的两项主要行动是:
getElementByI