
Всем привет. В этому уроке мы с вами разберем такие методы в лодаше как 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.