1. 实现curry函数
狐七 frontend
# 题目链接
https://bigfrontend.dev/problem/implement-curry (opens new window)
# 题目说明
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'
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
实现一个curry函数,该函数参数是函数join,返回值还是一个函数。
# 题目解析
- 需要判断join的参数个数和返回的函数给的参数个数
- 如果相等就可以调用join把全部参数传进去
- 如果不相等就继续返回函数,集齐参数
/**
* @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)
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14