Привет, друзья! Radash — это современная альтернатива Lodash, библиотека, предоставляющая набор часто используемых утилит (вспомогательных функций), реализованных на TypeScript. В данной статье мы вместе с вами разберем исходный код нескольких наиболее интересных утилит. Репозиторий с кодом библиотеки находится здесь. Обратите внимание: я позволил себе немного модифицировать отдельные утилиты для повышения читаемости и сокращения шаблонного кода. Также в нескольких местах пришлось поправить типы. Для тех, кому интересно, вот большая коллекция сниппетов JavaScript. Начнем с чего-нибудь попроще. Функция для генерации произвольного целого числа в заданном диапазоне Пример использования: Классика. Функция для извлечения произвольного элемента из массива Пример использования: Если требуется возвращать только уникальные элементы, можно мутировать исходный массив следующим образом: Пример использования: Это приводит нас к следующей функции. Функция для перемешивания элементов массива Пример использования: Простейшая, но не очень правильная реализация такой функции выглядит следующим образом: Более правильный вариант — Тасование Фишера-Йетса: Функция для генерации произвольной строки заданной длины Пример использования: Простейшая реализация такой функции выглядит следующим образом: Обратите внимание: если значения, генерируемые такими функциями, планируется использовать в качестве идентификаторов DOM-элементов, то следует помнить, что id элемента не может начинаться с числа. Возможно, это как-то связано с тем, что такие элементы становятся свойствами глобального объекта window. Для решения данной задачи достаточно заменить первое число в строке на какую-нибудь букву, например, x: Двигаемся дальше. Функция-генератор для формирования диапазона целых чисел Пример использования: Функция для генерации массива с диапазоном целых чисел Пример использования: Для генерации массива с числами двойной точности можно воспользоваться следующей функцией: Пример использования: Функция для разделение массива на части Пример использования: Функция для преобразования массива в объект Пример использования: Функция для преобразования объекта в массив Пример использования: Теперь кое-что более интересное. Частичное применение функции Пример использования: Функция для проксирования свойств объекта Данная функция позволяет выполнять определенные операции при доступе к свойству объекта (реализовано с помощью объекта Proxy): Пример использования: Функция мемоизации Данная функция позволяет мемоизировать (memoize) результаты вызова другой функции: Пример использования: Дебаунсинг и троттлинг Простыми словами: дебаунсинг (debouncing) — это когда функция выполняется один раз по истечении указанного времени с момента последнего вызова, независимо от количества ее вызовов, а троттлинг (throttling) — это когда в течение определенного времени функция выполняется только один раз, несмотря на количество ее вызовов (обычно функция выполняется в начале указанного периода). Начнем с дебаунсинга: Пример использования: Сколько бы раз мы не нажали кнопку, значение счетчика увеличится только на 1 по истечении 1 сек с момента последнего нажатия. Как правило, дебаунсинг применяется в отношении обработчиков таких событий, как scroll и mousemove (или touchmove). Троттлинг: Пример использования: Теперь сколько бы раз мы не нажимали кнопку, значение счетчика будет увеличиваться на 1 не чаще одного раза в сек. Троттлинг может применяться в отношении обработчиков таких событий, как keydown или mousedown. Напоследок самое интересное. Функция для выполнения асинхронной функции Пример использования: Функция для повторного выполнения асинхронной операции Данная функция позволяет предпринимать несколько попыток выполнения асинхронной операции: Пример использования: Функция для одновременного выполнения нескольких асинхронных операций Данная функция позволяет выполнять несколько асинхронных операций за один раз (реализовано с помощью Promise.all()): Пример использования: Пожалуй, это все, чем я хотел поделиться с вами в этой статье. Мы рассмотрели примерно половину утилит, предоставляемых Radash, остальные функции показались мне не такими интересными. Надеюсь, вы нашли для себя что-то полезное и не зря потратили время. Благодарю за внимание и happy coding!  JavaScript Developer