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

实现一个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
更新时间: 2022-11-21 16:22