06

Напиши сам

Стартер, видимые тесты и тот же прогон, что у карточек «что выведет».

Здесь просят не предсказать вывод, а написать функцию. Правила игры отличаются от первых пяти уровней.

  • Тесты — часть условия. В них видны имя функции, набор аргументов, краевые случаи и момент, когда тест проверяет результат. Тесты не меняются.
  • Стартер можно переписать целиком. Это заготовка, а не ограничение.
  • Проверка идёт на поведение. Эталон рядом — один рабочий вариант, а не единственный допустимый синтаксис.

Что ломается чаще всего

  • Состояние в глобальной переменной. Два вызова подряд должны быть независимы, если по смыслу это фабрика. Прячьте состояние в замыкание.
  • Асинхронная функция без промиса. Если по задаче нужно подождать, верните промис — тест его дождётся. Иначе проверка успеет пройти до результата.
  • Потерянный `this`. Колбэк таймера вызывается не как метод, поэтому this и часть аргументов придётся сохранить заранее или пробросить через apply.
  • Забытый краевой случай. Пустой массив, null на входе, отменённый таймер — обычно именно это отличает рабочий вариант от правильного.
  1. 6.1debounce
  2. 6.2throttle
  3. 6.3memoize
  4. 6.4sleep
  5. 6.5promiseAll
  6. 6.6curry
  7. 6.7compose
  8. 6.8pipe
  9. 6.9map
  10. 6.10filter
  11. 6.11reduce
  12. 6.12myCall
  13. 6.13myApply
  14. 6.14myBind
  15. 6.15promiseAllSettled
  16. 6.16promiseRace
  17. 6.17flat
  18. 6.18get
  19. 6.19groupBy
  20. 6.20deepClone
  21. 6.21deepEqual
  22. 6.22EventEmitter
  23. 6.23retry
  24. 6.24pool
  25. 6.25uniq
  26. 6.26chunk
  27. 6.27flattenDeep
  28. 6.28zip
  29. 6.29partition
  30. 6.30compact
  31. 6.31pick
  32. 6.32omit
  33. 6.33isEmpty
  34. 6.34mergeDeep
  35. 6.35promiseAny
  36. 6.36withTimeout
  37. 6.37promiseAllLimit
  38. 6.38mapLimit
  39. 6.39sequence
  40. 6.40delayChain
  41. 6.41retryWithDelay
  42. 6.42myFinally
  43. 6.43camelCase
  44. 6.44truncate
  45. 6.45template
  46. 6.46partial
  47. 6.47negate
  48. 6.48composeAsync
  49. 6.49once
  50. 6.50waitFor

Задачи из сборки