在javascript中创建简单过滤函数的最佳方法是什么?

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是否有任何内置函数来支持这些简单的比较?

Ava*_*vaq 4

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 函数。