Краткий справочник

Шпаргалка по Lodash

Подробный справочник по Lodash: методы коллекций, преобразование массивов, каррирование, троттлинг, строки, объекты и цепочки вызовов.

· Опубликовано

Lodash — современная библиотека утилит JavaScript, обеспечивающая модульность и высокую производительность при работе с массивами, объектами и строками.

Коллекции

Методы коллекций работают единообразно как с массивами, так и с объектами.

Поиск и фильтрация

_.filter(list, (n) => n % 2 === 0);   // -> Array of matches
_.find(list, (n) => n % 2 === 0);     // -> First matching item
_.findLast(list, (n) => n % 2 === 0); // -> Last matching item
_.reject(list, (n) => n % 2 === 0);   // -> Array with matches excluded

Глубокий доступ и изменение

// Safe path access
_.get(object, 'users[0].name', 'Default');
_.get(object, ['users', 0, 'name']);

// Set value at deep path
_.set(object, 'users[0].name', 'Alice');

// Extract elements at paths
_.at({ a: [{ b: { c: 3 } }] }, ['a[0].b.c']); // -> [3]

Итерация и предикаты

_.forEach(list, (item, index) => { /* ... */ });
_.forEachRight(list, (item) => { /* ... */ });

_.map(list, (item) => item.id);

_.every(users, (u) => u.active); // -> Boolean (all match)
_.some(users, (u) => u.active);  // -> Boolean (at least one matches)

Массивы

Разбиение и срез

_.chunk(['a', 'b', 'c', 'd'], 2);  // -> [['a', 'b'], ['c', 'd']]
_.compact([0, 1, false, 2, '', 3]); // -> [1, 2, 3] (removes falsy values)

_.drop([1, 2, 3, 4], 2);           // -> [3, 4]
_.take([1, 2, 3, 4], 2);           // -> [1, 2]

Операции над множествами

_.uniq([2, 1, 2]);                       // -> [2, 1]
_.uniqBy([{ x: 1 }, { x: 2 }, { x: 1 }], 'x'); // -> [{ x: 1 }, { x: 2 }]

_.difference([2, 1], [2, 3]);            // -> [1]
_.intersection([2, 1], [2, 3]);          // -> [2]
_.union([2], [1, 2]);                    // -> [2, 1]

Функции

Каррирование и частичное применение

const greet = (greeting, name) => `${greeting}, ${name}!`;
const curriedGreet = _.curry(greet);

const sayHello = curriedGreet('Hello');
sayHello('Alice'); // -> "Hello, Alice!"

Троттлинг и дебаунсинг

// Debounce: Wait for 300ms of inactivity before firing
const onSearch = _.debounce(searchApi, 300);

// Throttle: Fire at most once every 200ms
const onScroll = _.throttle(updateScrollPosition, 200);

// Once: Function that can only be invoked once
const initialize = _.once(setupApp);

Кэширование (Мемоизация)

const fibonacci = _.memoize((n) => {
  return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
});

Строки

Преобразование регистра

_.camelCase('Foo Bar');   // -> "fooBar"
_.kebabCase('Foo Bar');   // -> "foo-bar"
_.snakeCase('Foo Bar');   // -> "foo_bar"
_.startCase('fooBar');    // -> "Foo Bar"
_.capitalize('fred');     // -> "Fred"

Выравнивание и обрезка

_.pad('abc', 8);          // -> "  abc   "
_.padStart('abc', 6, '_'); // -> "___abc"
_.trim('  abc  ');        // -> "abc"
_.trim('-_-abc-_-', '_-'); // -> "abc"

Объекты

Ключи, значения и инверсия

_.keys({ a: 1, b: 2 });       // -> ['a', 'b']
_.values({ a: 1, b: 2 });     // -> [1, 2]
_.invert({ a: 'x', b: 'y' }); // -> { x: 'a', y: 'b' }

Слияние и клонирование

// Shallow clone vs deep clone
const shallow = _.clone(user);
const deep = _.cloneDeep(user);

// Deep merge
_.merge({ a: [{ b: 1 }] }, { a: [{ c: 2 }] }); // -> { a: [{ b: 1, c: 2 }] }

// Pick and omit
_.pick(user, ['name', 'email']);
_.omit(user, ['password', 'salt']);

Цепочки вызовов

Объединяйте операции в цепочку через _.chain() и извлекайте итоговое значение методом .value():

const youngestUsers = _(users)
  .filter((u) => u.active)
  .sortBy('age')
  .map((u) => `${u.name} is ${u.age}`)
  .head()
  .value();

Ссылки

Связанные темы