Javascript 具有多变量函数的Lodash映射

Javascript 具有多变量函数的Lodash映射,javascript,lodash,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 [ unde

是否可以使用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 ]

您可以这样做:

var numbers = [1, 2, 3];

function x(value, number) {
    return value + number;
}

console.log(_.map(numbers, function(value) { return  x(value, 10) }));

当然,收尾太棒了!只需创建一个函数“关闭”(包装)您的
x
函数,并将10作为第二个参数传递

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

function addTen (number) {
  return x(numberToAddTo, 10);
}

var nums = [1, 2, 3];

console.log(_.map(nums, addTen));

实际上,您在这里尝试的是“curry”函数
x
,lodash通过支持该函数。curried函数是一个可以一次接受一个参数的函数:如果没有提供完整的参数集,它将返回一个需要剩余参数的函数

这就是咖喱的样子:

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
因此,您的原始代码与当前版本非常接近:

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

(正如在对问题的评论中所指出的;
Function.prototype.bind
也可以用于咖喱,但是如果您已经在使用lodash,那么您最好使用特定于任务的东西)

部分应用程序,
映射(nums,x.bind(null,10))
,或者curry
x
。看起来您没有将
generateAdder
的参数传递到内部函数中。是的,我最初编写它是为了让您可以传递数字,但为了简单起见,删除了最后一分钟。错过了
10
。。谢谢。那么你可能会问自己,如果你根本不修改内部函数,为什么你需要外部函数来生成它呢?呸。。。哈哈,我很快就写好了。很晚了。我累了。谢谢:)老实说,我只想用
.bind
。。。但是在学习时最好从这类事情开始,如果OP对范围的理解足以使用
.bind