#6 Методы some, groupBy, sortBy в lodash

poster
В этом уроке мы разберем как использовать методы some, groupBy и sortBy в lodash.
Понравилось? Поделитесь с друзьями!
Понравилось?
Поделитесь с друзьями!
Комментарии
Текст видео

Всем привет. В этому уроке мы с вами разберем такие методы в лодаше как groupBy и sortBy. Но так как в прошлом уроке я совсем забыл рассказать про метод some, то насчем мы с него.

Метод some работает абсолютно так же, как и метод every, за исключением кого, что он проверяет а если ли в массиве хотя бы один елемент, который удовлетворяет условию. Давай напишем пример. Например у нас есть массив обьектов пользователей и нам нужно найти, а есть ли у нас хотя бы один активный пользователь.

_.some([{name: 'foo', isActive: false}, {name: 'bar', isActive: true}], function (item) {
  return item.isActive;
})

Первым аргументом идет массив пользователей. Вторым аргументом идет итератор. Если мы выполним этот код, то мы получаем true, поскольку у нас один из наших юзеров имеет isActive - true. Если хотя бы один елемент выполняет условие, то тогда метод _.some возвращает true.

Если же у нас будут все пользователи с isActive - false, то у нас вернется false.

_.some([{name: 'foo', isActive: false}, {name: 'bar', isActive: false}], function (item) {
  return item.isActive;
})

И конечно сокращенную форму записи можно писать вот таким образом, как мы уже писали ранее.

_.some([{name: 'foo', isActive: false}, {name: 'bar', isActive: true}], {isActive: true})

Теперь поговорим с вами о методе sortBy. Как понятно из названия, он сортирует елементы по определенному условию. Самый простой вариант, который чаще всего используется, например, у нас есть массив юзеров и нам нужно отсортировать их по лайкам.

_.sortBy([{name: 'Fred', likes: 10}, {name: 'John', likes: 20}, {name: 'Alex', likes: 1}], function (item) {
  return item.likes;
})

В функции вернем item.likes. Этим мы указываем, что мы хотим массив обьектов отсортировать по ключу likes. Как мы видим, в ответ мы получаем все тот же массив, но уже упорядоченный по лайкам.

Сокращенная форма записи будет выглядеть так. Просто вторым параметром идет поле по которому мы сортируем. В нашем случае это строка likes.

_.sortBy([{name: 'Fred', likes: 10}, {name: 'John', likes: 20}, {name: 'Alex', likes: 1}], 'likes')

То есть в одну строчку можно отсортировать массив обьектов. Это очень удобно и используется очень часто.

Теперь поговорим у функции groupBy. Очень часто нам нужно сгруппировать данные по какому-то условию Тут то нам и поможет groupBy. Например нам нужно сгруппировать юзеров на 2 группы - активных и не активных

_.groupBy([{name: 'user1', isActive: true}, {name: 'user2', isActive: true}, {name: 'user3', isActive: false}], function (item){
  return item.isActive;
})

Все также, как и в sortBy возвращаем item.isActive.

Как мы видим в результате мы получили обьект с двумя ключами true и false. Это как раз те два значения, по которым мы смогли разбить isActive. В каждом ключе содержится массив из обьектов, которые относятся к этому ключу.

Сокращенный метод groupBy будет выглядеть так

_.groupBy([{name: 'user1', isActive: true}, {name: 'user2', isActive: true}, {name: 'user3', isActive: false}], 'isActive')

Если вам когда-нибудь нужно разбить массив обьектов по каким-то группам: по цветам, по статусу и т.д., то всегда для этого стоит использовать groupBy.

Только зарегистрированные пользователи могут оставлять комментарии.  Войдите, пожалуйста.
Moe Green
11 месяцев назад
а знаменитый debounce? о котором так любят на собеседованиях спрашивать ))
monsterlessons
11 месяцев назад
debounce используется не так уж часто. Но знать, конечно, нужно
Moe Green
11 месяцев назад
удобные методы )