[Easy] LeetCode JS 30 - 2666. Allow One Function Call (僅允許呼叫一次函式)
2024年3月5日
💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容
LeetCode 30 Days of JavaScript
本題來自 LeetCode 的 30 天 JacaScript 挑戰
2666. Allow One Function Call (僅允許呼叫一次函式)題目描述
給定一個函式 fn
,回傳一個新的函式,它與原函式完全相同,但限定 fn
最多只能被呼叫一次。
- 在第一次呼叫時,新函式回傳與
fn
相同的結果。 - 之後每次呼叫,都回傳
undefined
。
// 範例一
輸入: fn = (a,b,c) => (a + b + c), calls = [[1,2,3],[2,3,6]]
輸出: [{"calls":1, "value":6}]
解釋:
const onceFn = once(fn);
onceFn(1, 2, 3); // 6
onceFn(2, 3, 6); // undefined, fn 沒有被呼叫
// 範例二
輸入: fn = (a,b,c) => (a * b * c), calls = [[5,7,4],[2,3,6],[4,6,8]]
輸出: [{"calls":1,"value":140}]
解釋:
const onceFn = once(fn);
onceFn(5, 7, 4); // 140
onceFn(2, 3, 6); // undefined, fn 沒有被呼叫
onceFn(4, 6, 8); // undefined, fn 沒有被呼叫
本題解答
以下是本題的解答,詳細解題思路可以在 E+ 成長計畫 看到。如果想練習更多題目,推薦可以到 GreatFrontEnd 上練習。
解法
function once(fn) {
let called = false;
return function (...args) {
if (!called) {
called = true;
return fn(...args);
}
return undefined;
};
}