Javascript Краткий вопрос о функции стрелки тела

У меня вопрос относительно стрелочных функций в Javascript: что именно делает код внутри метода map()? Я не могу понять, как именно это берет каждое слово, а затем метод join() берет первый символ?!

const animals = ['Hen', 'elephant', 'llama', 'leopard', 'ostrich', 'Whale', 'octopus', 'rabbit', 'lion', 'dog'];

const secretMessage = animals.map(animal => animal[0]);

console.info(secretMessage.join(''));

Array.map создает новый массив и для каждого элемента в целевом массиве (тот, для которого вы используете функцию карты), использует функцию (тот, который вы ей дали, animal => animal[0]), затем помещает любое значение, которое возвращает функция.

The Bomb Squad 17.03.2022 14:04

Я думаю, вы понимаете, что делает карта, но вас смущает animal[0]...

Dave Pritlove 17.03.2022 14:07

Точно! Я не могу понять, почему мы используем => и какова его конкретная цель.

Coding_Harry 17.03.2022 14:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
41
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

animals.map(animal => animal[0]); создает массив, содержащий первую букву каждого элемента. .map() создает новый массив, перебирает с помощью функции animal => animal[0], сопоставляет каждый элемент нового массива с первой буквой элемента массива животных (соответственно). Простые термины - функция внутри .map() является функцией итератора

secretMessage.join('') — создает строку, соединяя каждый элемент массива с разделителем ''

Ваша функция карты на каждой итерации берет следующий элемент массива (животное) и возвращает первую букву текущего животного.

Вы можете представить это таким образом. Задача функции состоит в том, чтобы перебрать заданный вами массив При каждом новом вызове в стрелочную функцию передается следующий элемент массива. С ним можно делать любые операции и возвращать результат. Результат, возвращаемый стрелочной функцией, будет записан в текущий элемент массива NEW.

Для более простого понимания вы можете заменить функцию стрелки на эту

(animal) => {
  return animal[0]
} 

В результате вы получите массив, каждый элемент которого будет состоять из одной буквы (в данном случае первой) join('') объединяет все элементы массива в строку. Здесь передается ee - этим и будут заполняться промежутки между элементами, в данном случае это пустая строка и получится непрерывная строка Если вы пройдете ' ', вы получите что-то вроде H e l l o W o r l d

What exactly is the code inside the map() method doing?

.map() — это операция, вызываемая для массива, которая будет выполнять предоставленную функцию для каждого элемента массива и возвращать новый массив, состоящий из значений, возвращаемых этой функцией.

Итак, это вызывает функцию для каждого элемента массива animals:

animals.map(/.../)

И какая функция вызывается для каждого элемента массива animals? Этот:

animal => animal[0]

Что, во всех смыслах и целях, по существу таково:

function (animal) {
  return animal[0];
}

Аргумент, полученный функцией, является элементом массива, для которого она вызывается. В этом случае каждый элемент массива animals является строкой, поэтому animal является строкой.

И функция возвращает первую букву этой строки.

Итак, это:

animals.map(animal => animal[0]);

Ожидает массив строк и возвращает массив первых букв каждой строки.

Array.map создает новый массив и для каждого элемента в целевом массиве (тот, для которого вы используете функцию карты), использует функцию (тот, который вы ей дали, animal => animal[0]), затем помещает любое значение, которое возвращает функция.

Что касается того, как, давайте рассмотрим императивный подход (поскольку вы хотите знать как)

//just for the example I'm overwriting the Array.map function
Array.prototype.map=function(yourCallback){
  let yourArray=this, resultArray=[]
  for(let i=0;i<yourArray.length;i++){
    resultArray[i]=yourCallback(yourArray[i],i,yourArray)
    //this line above is the relation between your callback and the returned result
  }
  return resultArray
}

const animals = ['Hen', 'elephant', 'llama', 'leopard', 'ostrich', 'Whale', 'octopus', 'rabbit', 'lion', 'dog'];

const secretMessage = animals.map(animal => animal[0]); //in this instance of arrow function, animal[0] IS what is returned

console.info(secretMessage.join(''));
Ответ принят как подходящий

Я думаю, вы понимаете, что делает карта, но вас смущает animal[0]

для каждой итерации цикла карты animal — это string, хранящийся в текущем элементе animalsarray. [0] — это сокращенная ссылка на первый символ строки в этом элементе.

string[0] идентично string.charAt(0)

Таким образом, ваша карта просто возвращает новый массив, содержащий первую букву каждого элемента исходного массива, который затем объединяется для создания секретного слова.

let string = "hello";
console.info(string[0]);
console.info(string.charAt(0));
console.info(string[0]===string.charAt(0));

Это был ответ, который я искал! Я просто не мог понять, как это возможно? Я имею в виду, когда я имел дело с animal[0], я знал, что он принимает первую строку/значение массива, но как я должен был знать, что это именно жизнь charAt? Спасибо за помощь!

Coding_Harry 17.03.2022 14:20

const animals — это массив строк, и вы можете получить доступ к отдельным буквам каждой строки так же, как вы можете получить доступ к отдельным элементам массива:

Первый элемент массива animals[0] — «курица».

animals.map() выполняет итерацию по каждому элементу массива, поэтому мы назвали каждый элемент в массиве «животным», мы могли бы назвать его как угодно, но мы сказали animals.map(animal => animal[0]), поэтому animal[0] — это первая буква каждой записи.

Если стрелочная функция имеет только одну строку, вам не нужно включать оператор return или фигурные скобки, она просто вернет результат, в нашем случае первую букву каждого животного. Затем он помещается в наш новый массив secretMessage как отдельный строковый элемент. Затем мы используем метод массива join(), чтобы сшить вместе те отдельные строки, которые содержит массив.

Вот хороший инструмент, который помогает визуализировать это: Репетитор по Python

Другие вопросы по теме