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

2024年3月5日

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

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+ 成长计划看到。如果想练习更多题目,推荐可以到 GreatFrontEnd 上练习

解法

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

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