Appearance
实现curry函数
题目链接
https://bigfrontend.dev/problem/implement-curry
题目说明
js
const join = (a, b, c) => {
return `${a}_${b}_${c}`
}
const curriedJoin = curry(join)
curriedJoin(1, 2, 3) // '1_2_3'
curriedJoin(1)(2, 3) // '1_2_3'
curriedJoin(1, 2)(3) // '1_2_3'
实现一个curry函数,该函数参数是函数join,返回值还是一个函数。
题目解析
- 需要判断join的参数个数和返回的函数给的参数个数
- 如果相等就可以调用join把全部参数传进去
- 如果不相等就继续返回函数,集齐参数
js
/**
* @param { (...args: any[]) => any } fn
* @returns { (...args: any[]) => any }
*/
function curry(fn) {
let len = fn.length
return cur = (...args) => {
if (args.length >= len) {
return fn.call(this, ...args)
} else {
return (...newArgs) => cur(...args, ...newArgs)
}
}
}