BFE.dev | 1. implement curry() | JavaScript Problem Solving

Hello friends, in this article I'm going to discuss and walk through my thought process of solving the Implement curry() problem on BFE.dev.

problem link

Here's the question.

Q. Currying is a useful technique used in JavaScript applications. Please implement a curry() function, which accepts a function and return a curried one. Here is an example


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'

Here's the Solution:


/**
 * @param { (...args: any[]) => any } fn
 * @returns { (...args: any[]) => any }
 */

function curry(fn) {

  return function curried(...args){
     // Check if the `fn` passed have enough args or not

    if(args.length >= fn.length){
     // If there are enough args call the `fn` with the `args`

      return fn.apply(this, args)
    } 
   else{

    // Else bind the function with the remaining args and recursively return it.
        return curried.bind(this, ...args)
    }
  }
}

Conclusion

Thanks for going through the problem, I'll be adding more problems in the blog as I continue to practice, feel free to like, share & comment your feedback.