6. debounce()を実装する

簡単  - accepted / - tried

パフォーマンスのために、debounce()、特に lodash debounce() の実装はよく使われています。

自力でdebounce()を実装してください。

以下は例です。

debounceされる前の実行順:

ABC ─ ─ D ─ ─ ─ ─ ─ ─ E ─ ─ FG 

3ユニットでdebounceしたら

─ ─ ─ ─ ─ ─ ─ ─ D ─ ─ ─ ─ ─ ─ ─ ─ ─ G 

補足

  1. 上記のスペックに従ってください。 lodash.debounce()と完全に一緒ではありません。
  2. window.setTimeoutwindow.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'])

時間と空間複雑性はどう?

(2)
(277)