Постоянно пользуюсь разными функциями из lodash. Уже писал о том как отсортировать объект по ключам. Сегодня напишу еще несколько примеров полезных функций из lodash.
Безопасное получение вложенного значения
Часто бывает так что у вас есть сложная структура данных:
var struct = {
clients: [{
user: {
name: 'John'
}
}]
};
Теперь чтобы получить значение свойства name
придется написать чудовищную конструкцию:
if (struct && struct.clients && struct.clients.length > 0 && struct.clients[0].user) {
name = struct.clients[0].user.name;
}
С _.get это намного проще:
name = _.get(struct, 'clients[0].user.name');
// можно задать значение по умолчанию
name = _.get(struct, 'clients[1].user.name', 'Guest');
// и set тоже работает!
_.set(struct, 'clients[1].user.name', 'Bob');
Применение методов коллекций к объектам
В JavaScript у массивов есть такие удобные и полезные функции как map
, filter
, forEach
и другие. Но к сожалению их нельзя использовать с объектами. С lodash это возможно:
var user = {
firstName: 'John',
lastName: 'Do',
};
_.forEach(user, (value) => {
console.log(value);
})
Компактный map
Если нужно достать какое-нибудь вложенное свойство у объектов в коллекции, то вместо полноценного кэллбека можно использовать синтаксис из примера с _.get
:
var clients = _.map(struct.clients, 'user.name');
Удобный фильтр
Очень часто приходится фильтровать объекты в списке, с _.filter это очень удобно:
var clients = [{
user: 'John',
}, {
user: 'Bob',
}];
// отфильтрует всех пользователей у которых user равен John
var johns = _.filter(clients, {user: 'John'});
// find работает также, только возвращает первое совпадение
var jhon = _.find(clients, {'user': 'John'});
Копирование объектов
Получить полную копию объекта в JavaScript не так то просто. Часто это делают через сериализацию JSON.parse(JSON.stringify(struct))
. В lodash можно использовать _.cloneDeep:
var copyStruct = _.cloneDeep(struct);
Получение случайного значения
В JavaScript Math.random
возвращает дробное число до единицы. Это не очень удобно когда вам нужно получить целое число в заданном диапазоне. В lodash для этого есть готовый метод random:
var number = _.random(5, 10);
А что если нужно выбрать случайный элемент из массива? Для это есть метод sample:
var items = ['a', 'b', 'c'];
// получить один случайный элемент из массива
var value = _.sample(items);
// получить два случайных элемента из массива
var randomValues = _.sample(items, 2);
Это далеко не полный список полезных функций из lodash.