lupor
lupor

Reputation: 138

Partial application right to left?

When using bind in JS, one can create functions with predefined arguments, e. g.:

var add = function (a, b) {
    return a + b;
};
var addToThree = add.bind(null, 3);

But how to I do this if I want to predefine the second, third etc. argument, but not the first?

Upvotes: 2

Views: 302

Answers (2)

cstuncsik
cstuncsik

Reputation: 2796

In ES2015 you can do something like this:

const partial = fn => (...pargs) => (...args) => fn.apply(null, [...pargs, ...args]);
const partialRight = fn => (...pargs) => (...args) => fn.apply(null, [...args, ...pargs.reverse()]);

const myFunc = (one, two, three, four) => {
  console.log(one);
  console.log(two);
  console.log(three);
  console.log(four);
};

const myFuncPartial = partial(myFunc)('1');

const myFuncPartialRight = partialRight(myFuncPartial)('4', '3');

myFuncPartialRight('2');

Upvotes: 1

void
void

Reputation: 36703

You can do

var add = function (a, b) {
    b = b || 5;
    return a + b;
};

In ES6 Default Parameters can be used in a very easy way

var add = function (a, b=5) {
    return a + b;
};

and call it like add(3);

Upvotes: 0

Related Questions