[Easy] LeetCode JS 30 - 2725. Interval Cancellation (可取消的間隔函式)

2024年3月5日

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

LeetCode 30 Days of JavaScript

本題來自 LeetCode 的 30 天 JacaScript 挑戰

2725. Interval Cancellation (可取消的間隔函式)

題目描述

給定一個函式 fn ,一個參數陣列 args 和一個時間間隔 t ,回傳一個取消函式 cancelFn。在經過 cancelTimeMs 毫秒的延遲後,將呼叫回傳的取消函式 cancelFn

setTimeout(cancelFn, cancelTimeMs);

函式 fn 應立即使用參數 args 呼叫,然後每隔 t 毫秒呼叫一次,直到 cancelTimeMs 毫秒時呼叫 cancelFn

// 範例

輸入: fn = (x) => x * 2, args = [4], t = 35, cancelT = 190

輸出:
[
   {"時間": 0, "返回": 8},
   {"時間": 35, "返回": 8},
   {"時間": 70, "返回": 8},
   {"時間": 105, "返回": 8},
   {"時間": 140, "返回": 8},
   {"時間": 175, "返回": 8},
]

解釋:
const cancelTimeMs = 190;
const cancelFn = cancellable((x) => x * 2, [4], 35);
setTimeout(cancelFn, cancelTimeMs);

每隔35ms,呼叫fn(4)。直到 t = 190 ms,然後取消。
第一次呼叫 fn 是在 0ms,fn(4) 返回8
第二次呼叫 fn 是在 35ms,fn(4) 返回8
第三次呼叫 fn 是在 70ms,fn(4) 返回8
第四次呼叫 fn 是在 105ms,fn(4) 返回8
第五次呼叫 fn 是在 140ms,fn(4) 返回8
第六次呼叫 fn 是在 175ms,fn(4) 返回8
在 t = 190 ms 時取消

本題解答

以下是本題的解答,詳細解題思路可以在 E+ 成長計畫看到

解法

var cancellable = function (fn, args, t) {
  fn(...args);
  const intervalId = setInterval(() => {
    fn(...args);
  }, t);

  return function cancelFn() {
    clearInterval(intervalId);
  };
};
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們