Currying is a useful technique used in JavaScript applications.
Please implement a curry() function, which accepts a function and return a curried one.
Good morning! Here's your coding interview problem for today.
This problem was asked by Google.
Currying is a useful technique used in JavaScript applications.
Please implement a curry() function, which accepts a function and return a curried one.
Example
const multiplyThree = (a, b, c) => {
return a * b * c;
};
const curriedMultiplyThree = curry(multiplyThree);
console.log(curriedMultiplyThree(1, 3, 5)); // 15
console.log(curriedMultiplyThree(1, 2)(5)); // 10
console.log(curriedMultiplyThree(1)(2)(3)); // 6
Note: The implementation of curry() is not provided and needs to be completed.
Solution
function curry(fn) {
return function curried(...args) {
if (fn.length === args.length) {
return fn.apply(this, args);
}
return (...args2) => curried.apply(this, args.concat(args2));
};
}
Explanation
- When you call curry() and pass it a function, it returns a new curried() function.
- The first time you call curried() and pass it some arguments, it checks if the number of arguments matches the required arguments for the original function.
- If it does match, it calls the original function with those arguments.
- If it doesn't match, it returns a new function that will accumulate more arguments and call curried() again.
- This continues until enough arguments have been accumulated to call the original function.
Top comments (0)