[Easy] LeetCode JS 30 - 2666. Allow One Function Call (仅允许呼叫一次函式)

2024年3月5日

💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

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 上追蹤我們