Привет, я Дмитрий Канаев, Backend NodeJS разработчик, представляю IT сообщество Работяги. В этом сообществе ты можешь поделиться своими проблемами в разработке и найти ответы на интересующие тебя вопросы из сферы IT. Ссылки на наши другие ресурсы вы можете найти в профиле нашего канала или в конце этой статьи.
Сегодня мы начнем цикл статей, в которых рассмотрим три важных функциональных «столпа» в JavaScript. И первой на очереди будет функция map.
Предположим, что нам требуется преобразовать все элементы крупной коллекции данных. Пусть у нас имеется список объектов и из него необходимо извлечь значение поля field для каждого объекта. Для решения подобных задач в процедурном подходе можно использовать следующую последовательность операторов:
Операция map реализуется в виде функции высшего порядка, применяющей функцию-итератор для перебора каждого элемента коллекции по очереди и возвращающей новую коллекцию равной длины с исходной, с результатом применения функции-итератора к каждому значению исходной коллекции. Ниже приведено решение той же самой задачи, но на этот раз – в функциональном стиле с помощью операции map:
Формальное определение данной операции выглядит следующим образом:
Операция map особенно удобна для синтаксического анализа целых коллекций элементов, не прибегая к необходимости организовывать цикл или решать затруднения, связанные с нетипичным определением области видимости. Кроме того, данная операция является иммутабельной, поскольку результатом ее выполнения является совершенно новый массив. Операции map передается в качестве параметра функция f и коллекция элементов n. В результате возвращается новый массив длиной n, элементы которого получаются в результате применения функции f к каждому элементу коллекции слева направо.
Рассмотрим подробнее внутреннюю реализацию операции map, для того чтобы понять, что скрывается за ней:
Как видим, ничего сложного в устройстве функции map – нет, и мы можем самостоятельно реализовать ее для работы с различными структурами данных, например с парами ключ-значение у объектов, а не только с коллекциями 😊
Ссылки на наши ресурсы – ниже: