我的代码如下:
var addX = (e) => return e+1;
我打电话给:
[1,2,3].map(addX);
我可以让“1”动态吗?喜欢:
[1,2,3].map(addX(2)); //this wont work, in this case it should add 2
答案 0 :(得分:2)
你可以像这样使用currying:
var addX = n => e => e + n;
console.log([1,2,3].map(addX(2)));
console.log([1,2,3].map(addX(10)));

这样做,你传递你想要添加到函数中的数字(n
)并返回一个新函数,该函数将该数字添加到它的参数({{1} })(使用地图时的每个元素)
答案 1 :(得分:2)
您需要一个超过e
的闭包,并返回一个带有一个回调参数的函数。
var addX = x => v => x + v;
console.log([1, 2, 3].map(addX(2)));
答案 2 :(得分:2)
您可以使用bind(thisArg, argument1)
发送额外参数
var addX = (a, b) => a+b;
console.log("2", [1,2,3].map(addX.bind(Array, 2)))
console.log("5", [1,2,3].map(addX.bind(Array, 5)))
在这种情况下,这个论点无关紧要。我只是把Array放在那里,它可以是null,null等等。
答案 3 :(得分:0)
您可以创建一个函数来返回一个带有添加量的函数。
以下是一个例子。
var addX = (addbit) => (e) => e + addbit;
console.log([1,2,3].map(addX(2)));
答案 4 :(得分:0)
您可以使用closure
:
var addX = inc => e => e + inc;
var res = [1,2,3].map(addX(2));
console.log(res);

<强>说明强>
var addX = inc => e => e + inc;
相当于:
var addX = function(inc) {
return function(e) {
return e + inc;
}
}
因此addX(2)
会返回回调function(e) { return e + 2 }
并且它是array.map
使用的回调
答案 5 :(得分:0)
我会这样做:)
var addX = (e) => e+1;
[1,2,3].map(num => addX(num))
答案 6 :(得分:0)
Lodash,Underscore和Ramda等几个实用程序库提供了一个curry()
实用程序函数,它接受一个函数并返回该函数的新版本,该函数可以一次一个地获取相同的参数,一次一个或者一下子全部。
这意味着您可以创建一个add
功能,可以立即添加两个数字add(4, 5)
,也可以预先添加两个数字&#34;包含其中一个值的函数:const increment = add(1); console.log(increment(5));
const add = _.curry((x, y) => x + y);
console.log(add(6, 7));
console.log([1,2,3].map(add(10)));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
如果您不想仅为此目的包含整个库,您也可以使用此独立版本的curry
:
var curryN = (function () {
var slice = Function.prototype.call.bind(Array.prototype.slice);
var bindArr = function (f, arr) { return f.bind.apply(f, [{}].concat(arr)); };
return function curryN(argCount, func) {
return function fn() {
var args = slice(arguments, 0, argCount);
return args.length === argCount
? func.apply({}, args)
: bindArr(fn, args);
};
};
})();
var curry = function curry(func) { return curryN(func.length, func); };
const add = curry((x, y) => x + y);
console.log(add(6, 7));
console.log([1,2,3].map(add(10)));
&#13;