mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-10 18:48:13 +08:00
80 lines
3.0 KiB
HTML
80 lines
3.0 KiB
HTML
<p>请你编写一个函数,接收参数为另一个函数和一个以毫秒为单位的时间 <code>t</code> ,并返回该函数的 <b>函数防抖 </b>后的结果。</p>
|
||
|
||
<p><b>函数防抖 </b>方法是一个函数,它的执行被延迟了 <code>t</code> 毫秒,如果在这个时间窗口内再次调用它,它的执行将被取消。你编写的防抖函数也应该接收传递的参数。</p>
|
||
|
||
<p>例如,假设 <code>t = 50ms</code> ,函数分别在 <code>30ms</code> 、 <code>60ms</code> 和 <code>100ms</code> 时调用。前两个函数调用将被取消,第三个函数调用将在 <code>150ms</code> 执行。如果改为 <code>t = 35ms</code> ,则第一个调用将被取消,第二个调用将在 <code>95ms</code> 执行,第三个调用将在 <code>135ms</code> 执行。</p>
|
||
|
||
<p><img alt="Debounce Schematic" src="https://assets.leetcode.com/uploads/2023/04/08/screen-shot-2023-04-08-at-11048-pm.png" style="width: 800px; height: 242px;" /></p>
|
||
|
||
<p>上图展示了了防抖函数是如何转换事件的。其中,每个矩形表示 100ms,反弹时间为 400ms。每种颜色代表一组不同的输入。</p>
|
||
|
||
<p>请在不使用 lodash 的 <code>_.debounce()</code> 函数的前提下解决该问题。</p>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong class="example">示例 1:</strong></p>
|
||
|
||
<pre>
|
||
<b>输入:</b>
|
||
t = 50
|
||
calls = [
|
||
{"t": 50, inputs: [1]},
|
||
{"t": 75, inputs: [2]}
|
||
]
|
||
<b>输出:</b>[{"t": 125, inputs: [2]}]
|
||
<strong>解释:</strong>
|
||
let start = Date.now();
|
||
function log(...inputs) {
|
||
console.log([Date.now() - start, inputs ])
|
||
}
|
||
const dlog = debounce(log, 50);
|
||
setTimeout(() => dlog(1), 50);
|
||
setTimeout(() => dlog(2), 75);
|
||
|
||
第一次调用被第二次调用取消,因为第二次调用发生在 100ms 之前
|
||
第二次调用延迟 50ms,在 125ms 执行。输入为 (2)。
|
||
</pre>
|
||
|
||
<p><strong class="example">示例 2:</strong></p>
|
||
|
||
<pre>
|
||
<b>输入:</b>
|
||
t = 20
|
||
calls = [
|
||
{"t": 50, inputs: [1]},
|
||
{"t": 100, inputs: [2]}
|
||
]
|
||
<b>输出:</b>[{"t": 70, inputs: [1]}, {"t": 120, inputs: [2]}]
|
||
<strong>解释:</strong>
|
||
第一次调用延迟到 70ms。输入为 (1)。
|
||
第二次调用延迟到 120ms。输入为 (2)。
|
||
</pre>
|
||
|
||
<p><strong class="example">示例 3:</strong></p>
|
||
|
||
<pre>
|
||
<b>输入:</b>
|
||
t = 150
|
||
calls = [
|
||
{"t": 50, inputs: [1, 2]},
|
||
{"t": 300, inputs: [3, 4]},
|
||
{"t": 300, inputs: [5, 6]}
|
||
]
|
||
<b>输出:</b>[{"t": 200, inputs: [1,2]}, {"t": 450, inputs: [5, 6]}]
|
||
<strong>解释:</strong>
|
||
第一次调用延迟了 150ms,运行时间为 200ms。输入为 (1, 2)。
|
||
第二次调用被第三次调用取消
|
||
第三次调用延迟了 150ms,运行时间为 450ms。输入为 (5, 6)。
|
||
</pre>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>提示:</strong></p>
|
||
|
||
<ul>
|
||
<li><code>0 <= t <= 1000</code></li>
|
||
<li><code>1 <= calls.length <= 10</code></li>
|
||
<li><code>0 <= calls[i].t <= 1000</code></li>
|
||
<li><code>0 <= calls[i].inputs.length <= 10</code></li>
|
||
</ul>
|