请教一道关于柯里化面试题

来源: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回答

双越

2021-10-15

这样可以。

关于 compose 函数,我后续升级时会重点考虑。

0
1
慕先生5461412
期待期待~
2021-10-15
共1条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程