[Easy] LeetCode JS 30 - 2725. Interval Cancellation (可取消的間隔函式)
2024年3月5日
💎 加入 E+ 成長計畫 如果你喜歡我們的內容,歡迎加入 E+,獲得更多深入的軟體前後端內容
LeetCode 30 Days of JavaScript
本題來自 LeetCode 的 30 天 JacaScript 挑戰
題目描述
給定一個函式 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);
};
};