具有多变量功能的Lodash Map

Ter*_*rry 3 javascript lodash

是否可以使用lodash迭代集合并将项目传递给需要两个(或更多)参数的函数?在以下示例中,该函数应采用两个值并添加它们.地图应该采用数组并为每个数组添加10.以下是我认为这有效的方法:

function x (a, b) {
    return a + b
}

var nums = [1, 2, 3]
console.log(_.map(nums,x(10)))
--->ans should be [11, 12, 13]
--->actually is [ undefined, undefined, undefined ]
Run Code Online (Sandbox Code Playgroud)

Ret*_*sam 6

你在这里尝试做的是"咖喱"这个x函数,lodash通过curry()支持.curried函数是一个可以一次获取一个参数的函数:如果你不提供一整套参数,它会返回一个期望剩余参数的函数.

这就是currying的样子:

function x(a,b) {
    return a + b;
}
x = _.curry(x);  //returns a curried version of x

x(3,5); //returns 8, same as the un-curried version

add10 = x(10);
add10(3); //returns 13
Run Code Online (Sandbox Code Playgroud)

所以你的原始代码非常接近curried版本:

console.log(_.map([1,2,3], _.curry(x)(10))); //Prints [11,12,13]
Run Code Online (Sandbox Code Playgroud)

(正如在问题的评论中指出的那样; Function.prototype.bind也可以用于currying,但是如果你已经在使用lodash,你也可以使用特定的任务)