Автор оригинала: FreeCodeCamp Community Member.
Array.map
может быть самая полезная функция JavaScript. Сдавая это в наши дни, как надевать ваш закусочный заряд без молотка.
Чтобы еще больше оценить карта
И углубить наше понимание этого, давайте посмотрим 4 уровня объяснений в восходящей сложности.
Скажи мне, какие из них вы получили, и какие из них удивило вас!
Оглавление
- До пятилетнего
- В ученицу в средней школе
- До разработчика реагирования
- К функциональному программиру
До пятилетнего
Вы знаете Dragonball Z? Вот мои любимые персонажи с шоу!
Гоку
Вегетация
Сундуки
Они сайяны, и они действительно сильны!
Я положил их в этот список – JavaScript вызывает их Массивы Отказ Это позволяет держать кучу вещей вместе:
saiyans = [goku, vegeta, trunks];
И у меня есть код, который превращает их в Super Saiyans, поэтому они получают 50x сильнее (буквально)! Этот код называется Функция Отказ
turnSuperSaiyan = () => { /* use your imagination */ }; turnSuperSaiyan(goku);
Что если я хочу трансформировать все 3 из них? Я должен запустить функцию 3 раза! Повторяющиеся вещи, как это скучно?
turnSuperSaiyan(goku); turnSuperSaiyan(vegeta); turnSuperSaiyan(trunks);
К счастью, программирование позволяет вам повторять много раз много раз! Array.map
Можно сразу превратить их в супер Сайяны!
Просто подключите Оказывает отказываться
там и вернусь Новый массив Супер Сайян Гоку, Вегета и стволы.
superSaiyans = saiyans.map(turnSuperSaiyan);
В ученицу в средней школе
Здравствуй!
Так вы узнали для
петли. Они отлично подходят для выполнения повторяющихся работ, но лично я не нужен ни одна года.
Не поймите меня неправильно, я все еще люблю автоматизировать повторяющуюся работу. На самом деле, большинство приложений включают повторяющуюся работу.
Подумайте об этих примерах …
- Instagram.
- Результаты поиска Google
- Электронные письма
- Контакты
- Текстовые сообщения
Если вы сводили их к ядру, эти повседневные приложения являются просто модными списками. Большая часть передней разработки преобразует эти списки во что-то удобное для пользователя.
Конечно, большая картина сложнее, но ядро большинства приложений манипулирует списки!
В программе JavaScript мы представляем списки как массивы.
Все массивы несут специальный метод под названием карта
Отказ Это позволяет трансформировать массив в новый, основанный на какой-то функции, которую вы его даете.
Вот несколько номеров.
numbers = [1, 2, 3, 4, 5];
И а Двойной
функция.
double = (x) => x * 2;
Можете ли вы удвоить каждый, используя для
петля?
doubledNumbers = []; for (let i = 0; i < numbers.length; i++) { doubledNumbers.push(double(numbers[i])) } // [2, 4, 6, 8, 10]
Прохладный! Вот та же самая идея, выраженная с карта
Отказ
doubledNumbers = numbers.map(double); // [2, 4, 6, 8, 10]
карта
Создает петлю под капотом, поэтому вам больше не нужно беспокоиться о опечатках или отсутствующих запятеях!
И это выходит за рамки только номеров. Вот некоторые пользователи …
users = [{ name: 'Bruce Wayne', location: 'Gotham City', heroName: 'Batman' }, { name: 'Barry Allen', location: 'Central City', heroName: 'The Flash' }, { name: 'Clark Kent', location: 'Kryptonopolis', heroName: 'Superman' }];
Как бы вы создали Новый массив каждого пользователя Имя
и Геронама
? Вероятно, используя для
петля.
userInfo = []; for (let i = 0; i < users.length; i++) { userInfo.push({ name: users[i].name, heroName: users[i].heroName }); } // Result [ { "name": "Bruce Wayne", "heroName": "Batman" }, { "name": "Barry Allen", "heroName": "The Flash" }, { "name": "Clark Kent", "heroName": "Superman" } ]
Вот версия с петлей меньше.
userInfo = users.map(u => ({ name: u.name, heroName: u.heroName })); // Result [ { "name": "Bruce Wayne", "heroName": "Batman" }, { "name": "Barry Allen", "heroName": "The Flash" }, { "name": "Clark Kent", "heroName": "Superman" } ]
Посмотрите, насколько легче? Мы можем реализовать карта
вот так:
map = (fn, array) => { const results = []; for (let i = 0; i < array.length; i++) { results.push(fn(array[i])); } return results; }
Таким образом, для каждого элемента вызывайте данную функцию и храните его в новом массиве!
До разработчика реагирования
Здравствуй!
Прототип массива предлагает метод под названием карта
Отказ
Он будет включать в себя ваш массив, вызывая данную функцию на каждом элементе и вернуть новый массив с этими изменениями.
Вместо для
петля, просто используйте карта
Чтобы получить имена пользователей и сделать пользовательский интерфейс.
const App = users => { return (
- My name is {users.map(u => u.name)}!
Да, вы можете метод цепочки, поскольку он возвращает тот же тип!
const App = users => { return (
-
{users
.map(u => u.name)
.map(name => (
- My name is {name}! ))}
Чрезвычайно полезно. Большинство ваших основных компонентов, вероятно, будут использовать карта
Отказ
К функциональному программиру
Карта просто поднимает функцию A -> B
в контекст F a -> f b
Отказ
JavaScript не расширяет эту выразительность за пределами массивов, к сожалению …
Спасибо Брайан Лонсдорф за Зрелое объяснение !
Для большего количества контента посмотрите https://yazeedb.com!
И, пожалуйста, дайте мне знать, что еще вы хотели бы увидеть! Мои DMS открыты Для вопросов, комментариев и предложений!