Как использовать .map() для перебора элементов массива в JavaScript
Введение
От классического цикла for
до метода forEach()
— для перебора наборов данных в функции используются различные приемы и методы для каждого элемента родительского массива. .map()
– это неизменяющий метод, создающий новый массив, в отличие от изменяющих методов, которые вносят изменения только в вызывающий массив.
Этот метод может иметь множество применений при работе с массивами. В этом руководстве вы рассмотрите четыре заслуживающих внимания случая использования .map()
в JavaScript: вызов функции элементов массива, преобразование строк в массивы, отображение списков в библиотеках JavaScript и переформатирование объектов массива.
Предпосылки
Этот учебник не требует написания кода, но если вам интересно следовать примерам, вы можете использовать инструменты разработчика Node.js REPL или браузера.
- Чтобы установить Node.js локально, выполните действия, описанные в разделе Как установить Node.js и создать локальную среду разработки.
- Гугл Хром.
Шаг 1 — Вызов функции для каждого элемента в массиве
.map()
принимает функцию обратного вызова в качестве одного из своих аргументов, и важным параметром этой функции является текущее значение элемента, обрабатываемого функцией. Это обязательный параметр. С помощью этого параметра вы можете изменить каждый элемент в массиве и вернуть его как измененный элемент вашего нового массива.
Вот пример:
const sweetArray = [2, 3, 4, 5, 35]
const sweeterArray = sweetArray.map(sweetItem => {
return sweetItem * 2
})
console.log(sweeterArray)
Этот вывод записывается в консоль:
Output[ 4, 6, 8, 10, 70 ]
Это можно упростить, чтобы сделать его чище с помощью:
// create a function to use
const makeSweeter = sweetItem => sweetItem * 2;
// we have an array
const sweetArray = [2, 3, 4, 5, 35];
// call the function we made. more readable
const sweeterArray = sweetArray.map(makeSweeter);
console.log(sweeterArray);
Тот же вывод записывается в консоль:
Output[ 4, 6, 8, 10, 70 ]
Такой код, как sweetArray.map(makeSweeter)
, делает ваш код более читабельным.
Шаг 2 — Преобразование строки в массив
Известно, что .map()
принадлежит прототипу массива. На этом шаге вы будете использовать его для преобразования строки в массив. Здесь вы не разрабатываете метод для работы со строками. Вместо этого вы будете использовать специальный метод .call()
.
Все в JavaScript является контекстом одного объекта для другого. Следовательно, вы копируете контекст .map()
из массива в строку.
В .call()
могут быть переданы аргументы используемого контекста и параметры для аргументов исходной функции.
Вот пример:
const name = "Sammy"
const map = Array.prototype.map
const newName = map.call(name, eachLetter => {
return `${eachLetter}a`
})
console.log(newName)
Этот вывод записывается в консоль:
Output[ "Sa", "aa", "ma", "ma", "ya" ]
Здесь вы использовали контекст .map()
для строки и передали аргумент функции, которую ожидает .map()
.
Это работает так же, как метод .split()
для строки, за исключением того, что каждый отдельный символ строки может быть изменен перед возвратом в массив.
Шаг 3 — Рендеринг списков в библиотеках JavaScript
Однако библиотеки JavaScript похожи на синтаксис JSX, поскольку метод .map()
заключен в синтаксис JSX.
Вот пример компонента React:
import React from "react";
import ReactDOM from "react-dom";
const names = ["whale", "squid", "turtle", "coral", "starfish"];
const NamesList = () => (
<div>
<ul>{names.map(name => <li key={name}> {name} </li>)}</ul>
</div>
);
const rootElement = document.getElementById("root");
ReactDOM.render(<NamesList />, rootElement);
Это компонент без сохранения состояния в React, который отображает div
со списком. Отдельные элементы списка отображаются с использованием .map()
для перебора массива names
. Этот компонент визуализируется с помощью ReactDOM в элементе DOM с Id
root
.
Шаг 4 — Переформатирование объектов массива
.map()
можно использовать для перебора объектов в массиве и, подобно традиционным массивам, для изменения содержимого каждого отдельного объекта и возврата нового массива. Эта модификация выполняется на основе того, что возвращается в функции обратного вызова.
Вот пример:
const myUsers = [
{ name: 'shark', likes: 'ocean' },
{ name: 'turtle', likes: 'pond' },
{ name: 'otter', likes: 'fish biscuits' }
]
const usersByLikes = myUsers.map(item => {
const container = {};
container[item.name] = item.likes;
container.age = item.name.length * 10;
return container;
})
console.log(usersByLikes);
Этот вывод записывается в консоль:
Output[
{shark: "ocean", age: 50},
{turtle: "pond", age: 60},
{otter: "fish biscuits", age: 50}
]
Здесь вы изменили каждый объект в массиве, используя скобки и запись через точку. Этот вариант использования можно использовать для обработки или сжатия полученных данных перед их сохранением или анализом во внешнем приложении.
Заключение
В этом руководстве мы рассмотрели четыре варианта использования метода .map()
в JavaScript. В сочетании с другими методами функциональность .map()
может быть расширена. Для получения дополнительной информации см. нашу статью «Как использовать методы массива в JavaScript: методы итерации».