2020-01-16
描述
将一个深度为 n
的柯里化函数进行解构。
提示
- 返回一个可变的函数
- 为提供的参数使用
Array.prototype.reduce()
,让其可以逐层调用每一层的柯里化函数 - 如果提供的参数
length
小于n
的话则抛出一个错误 - 使用
Array.prototype.slice(0, n)
获取符合要求的所有参数,使其作为fn
的参数进行调用 - 第二个参数
n
的默认值为1
,表示只进行一层解构
代码
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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于