[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);
};
};