mad*_*ox2 8 javascript arrays functional-programming
很多时候我遇到同样的问题:我想用简单的条件过滤数组,例如检查非/等于,大于,小于,包含...
我的代码看起来像这样:
var result = [1, 2, 3, 4].filter(function(i) {
return i > 2;
});
console.log(result); // [3, 4]
Run Code Online (Sandbox Code Playgroud)
有这么简单的操作的快捷方式很好,所以我创建了一些辅助函数:
function isGreaterThan(value) {
return function(original) {
return value < original;
}
}
[1, 2, 3, 4].filter(isGreaterThan(2)); // [3, 4]
Run Code Online (Sandbox Code Playgroud)
要么:
function isGreaterThan(value, original) {
return value < original;
}
[1, 2, 3, 4].filter(isGreaterThan.bind(null, 2)); // [3, 4]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法如何在JavaScript中执行此操作?javascript是否有任何内置函数来支持这些简单的比较?
Madox,你偶然发现的是柯里化的概念!您会很高兴听到整个 JavaScript 社区都是围绕这个想法构建的。使用Ramda,你的代码将如下所示:
var filterSmallNumbers = filter(gte(3));
var smallNumbers = filterSmallNumbers([1,2,3,4,5,6]);
Run Code Online (Sandbox Code Playgroud)
它有效。
Ramda 提供的所有内容都是“柯里化辅助函数”列表,就像您展示的那样。如果您更愿意柯里化自己的辅助函数,那么您可能需要一个curry
可以减少样板文件的辅助函数var isGreaterThan = curry(function(a, b){ return a > b })
:大多数实用程序库(例如 Underscore、Lodash 或 Ramda)都提供了这种 curry 函数。