[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;
  };
}
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們