Leetcode #2666. Allow One Function Call

Susan Githaiga - Aug 23 - - Dev Community

Given a function fn, return a new function that is identical to the original function except that it ensures fn is called at most once.

The first time the returned function is called, it should return the same result as fn.
Every subsequent time it is called, it should return undefined.

Example 1:

Input:

fn = (a,b,c) => (a + b + c), calls = [[1,2,3],[2,3,6]]
Enter fullscreen mode Exit fullscreen mode

Output:

[{"calls":1,"value":6}]
Enter fullscreen mode Exit fullscreen mode

Explanation:

const onceFn = once(fn);
onceFn(1, 2, 3); // 6
onceFn(2, 3, 6); // undefined, fn was not called
Enter fullscreen mode Exit fullscreen mode

Example 2:

Input:

fn = (a,b,c) => (a * b * c), calls = [[5,7,4],[2,3,6],[4,6,8]]
Enter fullscreen mode Exit fullscreen mode

Output:

Enter fullscreen mode Exit fullscreen mode

Explanation:

const onceFn = once(fn);
onceFn(5, 7, 4); // 140
onceFn(2, 3, 6); // undefined, fn was not called
onceFn(4, 6, 8); // undefined, fn was not called
Enter fullscreen mode Exit fullscreen mode

Constraints:

calls is a valid JSON array

1 <= calls.length <= 10
1 <= calls[i].length <= 100
2 <= JSON.stringify(calls).length <= 1000
Enter fullscreen mode Exit fullscreen mode

Solution Explanation

In this case, we are required to create a higher-order function(a function that returns another function) Read more about high-order functions here

We should make sure that the original function fn is only called once regardless of how many times the second function is called.

If the function fn has been not called, we should call the function fn with the provided arguments args. Else, we should return undefined

Final solution

Image description

I hope this article helps. If you like the article, please leave a like and feel free to leave any concerns on the comment section. That is all for today.

. . . . . . . . . .
Terabox Video Player