Всем привет. Мы продолжаем знакомиться с библиотекой lodash. И сегодня мы разберем такой метод как map. Как и в случае с each map существует как нативно, так и в lodash, но нативно он не такой гибкий.
Что такое map вообще и зачем он нужен? Он позволяет создавать новый массив елементов проходя через каждый елемент массива на который мы применяем метод map и вызывать функцию итератор.
Давайте попробуем В прошлый раз мы писали метод each, который пушил в массив значения. Давайте попробуем добиться того же с помощью map. Нативно это пишется так.
var newArr = [1,2,3].map(function (item) {
return item;
})
Мы проходим по массиву и возвращаем каждое значение. Если мы посмотрим в массив newArr, то увидим, что там находятся все три елемента предыдущего массива. Мы сделали меньше шагов, чем мы делали с each, когда создавали массив, а потом пушили в него внутри each данные.
В помощью lodash это будет выглядеть так
_.map([{id: 1}, {id: 2}, {id: 3}], function (item) {
return item.id;
})
Первым аргументом идет массив обьектов, а вторым итератор у которого будет параметр item. И внутри мы будем возвращать item.id. Как мы видим, нам вернулся массив id, которые мы вытащили из каждого обьекта.
Мы можем точно так же присвоить это выражение в переменную newArr.
var newArr = _.map([{id: 1}, {id: 2}, {id: 3}], function (item) {
return item.id;
})
И если мы посмотрим, то в newArr у нас находится 3 id. Это очень удобно, и так же как each, map в lodash можно применять к обьектам. Выглядит это так
var newArr = _.map({id: 1, name: 'someName'}, function (item) {
return item.id;
})
Допустим у нас есть обьект с id и name. Если мы посмотрим в newArr, то увидим, что у нас массив из значений этого обьекта.
[1, "someName"]
Что тоже очень удобно. Так как задача получить id с каждого обьекта массива очень частая, то в lodash раньше была создана специальная функция pluck. Pluck - это функция, которая позволяет получить определенное поле из каждого обьекта в массиве. Но в четвертой версии lodash ее убрали и ее функционал теперь доступен в функции map.
var newArr = _.map([{id: 1}, {id: 2}], 'id');
Применяем map на массив обьектов. Вторым параметром зададим строку id. Если мы теперь посмотрим что у нас находится в массиве newArr, мы увидим, что у нас точно так же попало в массив 2 id. На самом деле это просто синтаксический сахар, который позволяет извлекать какое-то поле из каждого обьекта в массиве. Что очень удобно. Это, конечно, не так гибко как итератор, чтобы сделать какие-то модификации, но это занимает меньше кода.
На сегодня все, а в следующем уроке мы разберем такие методы как find и filter.