DEV Community

Cover image for Leetcode #2666. Allow One Function Call
Susan Githaiga
Susan Githaiga

Posted on • Edited on

Leetcode #2666. Allow One Function Call

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.

SurveyJS custom survey software

Build Your Own Forms without Manual Coding

SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.

Learn more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more