将参数传递给map函数

时间:2018-02-02 13:17:32

标签: javascript

我的代码如下:

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

7 个答案:

答案 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));

&#13;
&#13;
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;
&#13;
&#13;

如果您不想仅为此目的包含整个库,您也可以使用此独立版本的curry

&#13;
&#13;
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;
&#13;
&#13;