879 B
879 B
title, tags, firstSeen, lastUpdated
| title | tags | firstSeen | lastUpdated |
|---|---|---|---|
| uncurry | function,advanced | 2018-02-14T11:56:44+02:00 | 2020-10-22T20:24:44+03:00 |
Uncurries a function up to depth n.
- Return a variadic function.
- Use
Array.prototype.reduce()on the provided arguments to call each subsequent curry level of the function. - If the
lengthof the provided arguments is less thannthrow an error. - Otherwise, call
fnwith the proper amount of arguments, usingArray.prototype.slice(). - Omit the second argument,
n, to uncurry up to depth1.
const uncurry = (fn, n = 1) => (...args) => {
const next = acc => args => args.reduce((x, y) => x(y), acc);
if (n > args.length) throw new RangeError('Arguments too few!');
return next(fn)(args.slice(0, n));
};
const add = x => y => z => x + y + z;
const uncurriedAdd = uncurry(add, 3);
uncurriedAdd(1, 2, 3); // 6