请教一道关于柯里化面试题
来源:1-1 课前必读

慕先生5461412
2021-10-15
问下老师,请问这样写合适吗?是否还有改进空间?
// 要求实现这样的效果 compose(f1, f2)(f3)(f4)([1, 2, 3]) => f4(f3(f2(f1([1,2,3]))))
//
function compose(...args) {
//这个是我自己写的
return (...rest) => {
if (rest.length === 1 && rest[0] instanceof Array) {
let res = rest[0];
for (let fn of args) {
res = fn.call(null, res);
}
return res;
} else {
let _allArgs = [...args, ...rest];
return compose(..._allArgs);
}
}
}
function f1(args) {
return args.map((a) => a * 1);
}
function f2(args) {
return args.map((a) => a * 2);
}
function f3(args) {
return args.map((a) => a * 3);
}
function f4(args) {
return args.map((a) => a + 3);
}
const res = f4(f3(f2(f1([1, 2, 3]))));
const conRes = compose(f1, f2)(f3)(f4)([1, 2, 3]);
console.log(res);
console.log(conRes);
写回答
1回答
-
这样可以。
关于 compose 函数,我后续升级时会重点考虑。
012021-10-15
相似问题