6. debounce()を実装する
シェアしよう
簡単 - accepted / - tried
パフォーマンスのために、debounce()、特に lodash debounce() の実装はよく使われています。
自力でdebounce()
を実装してください。
以下は例です。
debounceされる前の実行順:
─ A ─ B ─ C ─ ─ D ─ ─ ─ ─ ─ ─ E ─ ─ F ─ G
3ユニットでdebounceしたら
─ ─ ─ ─ ─ ─ ─ ─ D ─ ─ ─ ─ ─ ─ ─ ─ ─ G
補足
- 上記のスペックに従ってください。
lodash.debounce()
と完全に一緒ではありません。 window.setTimeout
とwindow.clearTimeout
は精確ではないから、入力したコードをジャッジするときに、他の実装に入れ替えられます。interfaceが一緒にで、気にしなくて良い。
概ね以下のようにジャッジされます。
let currentTime = 0
const run = (input) => {
currentTime = 0
const calls = []
const func = (arg) => {
calls.push(`${arg}@${currentTime}`)
}
const throttled = throttle(func, 3)
input.forEach((call) => {
const [arg, time] = call.split('@')
setTimeout(() => throttled(arg), time)
})
return calls
}
expect(run(['A@0', 'B@2', 'C@3'])).toEqual(['A@0', 'C@3'])