light-lodash
v1.4.0
Published
Утилиты из библиотеки Lodash
Readme
light-lodash
Легковесная библиотека утилит для JavaScript, включающая популярные функции из Lodash(и не только). Она предоставляет только самые необходимые методы, чтобы минимизировать размер зависимостей и упростить решение повседневных задач.
Установка
NPM:
npm install light-lodashYARN:
yarn add light-lodashПосле установки вы можете импортировать необходимые функции:
import { isEmpty, get } from 'light-lodash';
// или для CommonJS:
const { isEmpty, get } = require('light-lodash');Доступные функции
isEmpty
Определяет, является ли значение пустым. Возвращает true, если:
- объект не имеет собственных свойств;
- массив или строка имеют длину 0;
- коллекция типа Map или Set не содержит элементов;
- значение null или undefined (они считаются пустыми);
В остальных случаях значение не считается пустым (функция вернёт false).
Пример использования:
isEmpty([]); // true, пустой массив
isEmpty({}); // true, пустой объект
isEmpty({ a: 1 }); // false, объект имеет свойство
isEmpty(''); // true, пустая строка
isEmpty('hello'); // false, непустая строка
isEmpty(0); // false (число не является коллекцией)
isEmpty(null); // trueget
Безопасно получает вложенное значение из объекта по указанному пути. Принимает объект, строку пути (с точечной нотацией или массивом ключей) и необязательное значение по умолчанию. Если значение по заданному пути отсутствует, вернёт указанное значение по умолчанию (или undefined, если оно не передано).
Пример использования:
const obj = { user: { name: 'Alice', info: { age: 30 } } };
get(obj, 'user.name'); // 'Alice'
get(obj, 'user.info.age'); // 30
get(obj, 'user.info.job', 'нет данных'); // 'нет данных' (путь 'user.info.job' не существует)isString
Проверяет, является ли переданное значение строкой (тип "string").
Пример использования:
isString('Привет'); // true
isString(''); // true (пустая строка тоже строка)
isString(123); // false
isString(true); // false
isString({}); // falseisObject
Проверяет, является ли значение объектом. Возвращает true, если значение не null и его тип (typeof) равен 'object'. Для null функция возвращает false.
Пример использования:
isObject({}); // true
isObject({ a: 1 }); // true
isObject([1, 2, 3]); // true (массив тоже объект в JS)
isObject(null); // false (null не является объектом)
isObject('текст'); // falseisArray
Определяет, является ли значение массивом (Array).
Пример использования:
isArray([1, 2, 3]); // true
isArray([]); // true
isArray('ABC'); // false
isArray({ 0: 'a', 1: 'b' }); // false (объект, не массив)intersection
Возвращает новый массив, содержащий элементы, общие для всех переданных массивов. Сравнение производится по строгому равенству (===).
Пример использования:
intersection([1, 2, 3], [2, 3, 4]); // [2, 3]
intersection(['a', 'b', 'c'], ['b', 'c', 'd'], ['b', 'c', 'e']); // ['b', 'c']
intersection([1, 2], [3, 4]); // [] (нет общих элементов)cx
Формирует строку CSS‑классов в зависимости от условия.
| Параметр | Тип | Описание |
|----------|-----|----------|
| defaultClass | string \| string[] | Базовые классы. Могут быть переданы строкой ('btn primary') или массивом (['btn', 'primary']). |
| activeClass | string | Класс, который добавляется, если condition === true. |
| nonActiveClass? | string | Класс, который добавляется, если condition === false. Если не передан или пустой, при false ничего не добавится. |
| condition? | boolean | Условие (по умолчанию true). |
Как работает
defaultClassнормализуется в массив строк.- Если
conditionистинно — добавляетсяactiveClass.
Иначе — добавляетсяnonActiveClass(если он задан и не пуст). - Пустые строки отфильтровываются, массив объединяется в результат через пробел.
Пример использования:
// 1. Условие истинно ⇒ activeClass добавлен
cx({
defaultClass: 'btn primary',
activeClass: 'btn--active',
nonActiveClass: 'btn--disabled',
condition: true
});
// console log 'btn primary btn--active'
// 2. Условие ложно ⇒ nonActiveClass добавлен
cx({
defaultClass: ['card', 'shadow'],
activeClass: 'selected',
nonActiveClass: 'muted',
condition: false
});
// console log 'card shadow muted'
// 3. nonActiveClass не передан ⇒ при false ничего не добавится
cx({
defaultClass: 'item',
activeClass: 'item--open',
condition: false
});
// console log 'item'has
Проверяет, содержит ли объект указанный вложенный ключ или путь. Возвращает true, если значение по заданному пути существует (не является undefined).
Пример использования:
const obj = { a: { b: 2 } };
has(obj, 'a'); // true (свойство 'a' существует)
has(obj, 'a.b'); // true (свойство b внутри a существует)
has(obj, 'a.x'); // false (у объекта a нет свойства 'x')
has(obj, 'a.b.c'); // false (у объекта a.b нет свойства 'c')pickBy
Создает новый объект, выбирая из исходного только те пары ключ-значение, для которых заданная функция-предикат возвращает true. Перебор происходит по собственным свойствам объекта; предикат вызывается с аргументами (значение, ключ) для каждого свойства.
Пример использования:
const user = { name: 'Alice', age: 25, active: true };
const onlyNumbers = pickBy(user, (value, key) => typeof value === 'number');
// onlyNumbers -> { age: 25 } (выбраны только свойства со значением числа)
const startsWithA = pickBy(user, (value, key) => key.startsWith('a'));
// startsWithA -> { age: 25, active: true } (выбраны свойства, ключ которых начинается с "a")isEqual
Выполняет глубокое сравнение двух значений на равенство. Рекурсивно проверяет объекты и массивы, сравнивая вложенные данные. Возвращает true, если обе структуры эквивалентны по содержимому.
Пример использования:
isEqual([1, { x: 2 }], [1, { x: 2 }]); // true (вложенные объекты эквивалентны)
isEqual({ a: 1, b: 2 }, { b: 2, a: 1 }); // true (свойства совпадают, порядок не важен)
isEqual([1, 2], [1, 2, 3]); // false (разная длина массивов)
isEqual({ x: 5 }, { x: 5, y: undefined }); // false (во втором объекте есть лишнее свойство y)difference
Возвращает новый массив, содержащий элементы первого массива, которые отсутствуют во всех остальных предоставленных массивах. Сравнение выполняется по строгому равенству (===).
Пример использования:
difference([1, 2, 3], [2, 4]); // [1, 3] (убраны элементы, присутствующие во втором массиве)
difference(['a', 'b', 'c'], ['b', 'd'], ['c']); // ['a'] (убраны элементы, встречающиеся в последующих массивах)
difference([1, 2], [1, 2], [1, 2]); // [] (все элементы первого массива присутствуют в остальных)debounce
Создает функцию, которая откладывает выполнение указанного действия на заданное время задержки (delay). Это полезно для ограничения частоты вызова функций (например, обработчиков ввода или событий resize). Оригинальная функция будет выполнена только спустя delay миллисекунд после последнего вызова обёрнутой функции.
Пример использования:
const fn = debounce(() => console.log('Выполнено!'), 1000);
fn();
fn();
fn();
// Вызвали fn три раза подряд. Благодаря debounce, console.log выполнится только один раз через 1 секунду после последнего вызова fn().
cloneDeep
Глубоко копирует объекты, массивы, Date, Map, Set, RegExp.
Пример использования:
const original = { a: { b: [1, 2] } };
const copy = cloneDeep(original);
copy.a.b.push(3);
// original остаётся { a: { b: [1, 2] } }uniq
Удаляет дубликаты из массива (строгое равенство ===).
Пример использования:
uniq([1, 2, 2, 3]); // [1, 2, 3]throttle
Ограничивает количество вызовов функции до одного за интервал wait.
Пример использования:
const onScroll = throttle(handleScroll, 200);
window.addEventListener('scroll', onScroll);merge
Глубокое объединение объектов (изменяет первый объект).
Пример использования:
merge({ x: { y: 1 } }, { x: { z: 2 } });
// { x: { y: 1, z: 2 } }omit
Возвращает копию объекта без указанных ключей.
Пример использования:
omit({ a: 1, b: 2, c: 3 }, ['b', 'c']); // { a: 1 }flattenDeep
Рекурсивно разворачивает массивы любой глубины в плоский.
ример использования:
flattenDeep([1, [2, [3, [4]]]]);
// [1, 2, 3, 4]
flattenDeep([[[], [1]], 2]);
// [1, 2]