HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Рассмотрим следующую задачу. Возьмём список пользователей и извлечём из него имена всех пользователей:</p>
1 <p>Рассмотрим следующую задачу. Возьмём список пользователей и извлечём из него имена всех пользователей:</p>
2 <p>Здесь мы видим обычную агрегацию с использованием цикла<em>for...of</em>. А что, если нам понадобится извлечь возраст? Повторяем:</p>
2 <p>Здесь мы видим обычную агрегацию с использованием цикла<em>for...of</em>. А что, если нам понадобится извлечь возраст? Повторяем:</p>
3 <p>В примерах выше легко увидеть закономерность. Выполняется один и тот же проход по циклу, и результат собирается в массив result. Единственное, что меняется - значение, которое мы извлекаем из элементов исходного массива.</p>
3 <p>В примерах выше легко увидеть закономерность. Выполняется один и тот же проход по циклу, и результат собирается в массив result. Единственное, что меняется - значение, которое мы извлекаем из элементов исходного массива.</p>
4 <p>Операция, которую мы выполняли в обеих ситуациях, называется<strong>отображением</strong>(mapping). В коде мы взяли исходный массив и отобразили его в другой массив, попутно выполнив необходимые преобразования над каждым элементом. Важно, что размер получившегося массива равен размеру исходного массива.</p>
4 <p>Операция, которую мы выполняли в обеих ситуациях, называется<strong>отображением</strong>(mapping). В коде мы взяли исходный массив и отобразили его в другой массив, попутно выполнив необходимые преобразования над каждым элементом. Важно, что размер получившегося массива равен размеру исходного массива.</p>
5 <p>Задача отображать данные в реальном коде встречается буквально на каждом шагу. Это настолько важная операция, что для нее создана специальная функция высшего порядка<a>map()</a>:</p>
5 <p>Задача отображать данные в реальном коде встречается буквально на каждом шагу. Это настолько важная операция, что для нее создана специальная функция высшего порядка<a>map()</a>:</p>
6 <p>Метод map() принимает первым параметром функцию. Дальше, внутри себя, map() перебирает элементы переданной коллекции и для каждого элемента вызывает переданную функцию. На вход этой функции передаётся элемент исходного массива, а её результат записывается в новый массив, который и возвращается наружу.</p>
6 <p>Метод map() принимает первым параметром функцию. Дальше, внутри себя, map() перебирает элементы переданной коллекции и для каждого элемента вызывает переданную функцию. На вход этой функции передаётся элемент исходного массива, а её результат записывается в новый массив, который и возвращается наружу.</p>
7 <p>Сравните решение задачи получения списка имен через цикл и с помощью метода map(). Последний имеет довольно много преимуществ. Во-первых, код с ним значительно короче. Во-вторых, от нас скрыта повторяющаяся логика перебора. Больше не нужно явно определять цикл и выполнять руками все те операции, которые можно не выполнять. Метод map() позволяет сосредоточиться на сути происходящего, скрывая ненужные детали (проход по циклу).</p>
7 <p>Сравните решение задачи получения списка имен через цикл и с помощью метода map(). Последний имеет довольно много преимуществ. Во-первых, код с ним значительно короче. Во-вторых, от нас скрыта повторяющаяся логика перебора. Больше не нужно явно определять цикл и выполнять руками все те операции, которые можно не выполнять. Метод map() позволяет сосредоточиться на сути происходящего, скрывая ненужные детали (проход по циклу).</p>
8 <p>Типичный пример, который любят приводить в документации к функции map() разных языков программирования - применение некоторой арифметической операции к каждому элементу коллекции:</p>
8 <p>Типичный пример, который любят приводить в документации к функции map() разных языков программирования - применение некоторой арифметической операции к каждому элементу коллекции:</p>
9 <p>Пример выглядит искусственно, но хорошо отражает суть операции.</p>
9 <p>Пример выглядит искусственно, но хорошо отражает суть операции.</p>
10 <h2>Реализация</h2>
10 <h2>Реализация</h2>
11 <p>Напишем свою собственную функцию myMap(), работающую аналогично методу массива map():</p>
11 <p>Напишем свою собственную функцию myMap(), работающую аналогично методу массива map():</p>
12 <p>Главное отличие кода функции myMap() (и метода map()) от ручного обхода массива заключается в том, что функция myMap() не знает, что нужно сделать с каждым элементом массива. Поэтому она принимает вторым аргументом функцию, которую вызывает для каждого элемента исходного массива, а результат вызова записывается в выходной массив. Чем будет этот результат - функция myMap() не знает, и ей этого знать не нужно. Ответственность за обработку лежит на пользователях.</p>
12 <p>Главное отличие кода функции myMap() (и метода map()) от ручного обхода массива заключается в том, что функция myMap() не знает, что нужно сделать с каждым элементом массива. Поэтому она принимает вторым аргументом функцию, которую вызывает для каждого элемента исходного массива, а результат вызова записывается в выходной массив. Чем будет этот результат - функция myMap() не знает, и ей этого знать не нужно. Ответственность за обработку лежит на пользователях.</p>