npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

light-lodash

v1.4.0

Published

Утилиты из библиотеки Lodash

Readme

light-lodash


Легковесная библиотека утилит для JavaScript, включающая популярные функции из Lodash(и не только). Она предоставляет только самые необходимые методы, чтобы минимизировать размер зависимостей и упростить решение повседневных задач.


Установка

NPM:

npm install light-lodash

YARN:

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);             // true

get

Безопасно получает вложенное значение из объекта по указанному пути. Принимает объект, строку пути (с точечной нотацией или массивом ключей) и необязательное значение по умолчанию. Если значение по заданному пути отсутствует, вернёт указанное значение по умолчанию (или 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({});          // false

isObject

Проверяет, является ли значение объектом. Возвращает true, если значение не null и его тип (typeof) равен 'object'. Для null функция возвращает false.

Пример использования:

isObject({});           // true
isObject({ a: 1 });     // true
isObject([1, 2, 3]);    // true (массив тоже объект в JS)
isObject(null);         // false (null не является объектом)
isObject('текст');      // false

isArray

Определяет, является ли значение массивом (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). |

Как работает

  1. defaultClass нормализуется в массив строк.
  2. Если condition истинно — добавляется activeClass.
    Иначе — добавляется nonActiveClass (если он задан и не пуст).
  3. Пустые строки отфильтровываются, массив объединяется в результат через пробел.

Пример использования:

// 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]

Лицензия MIT