@CoCoCoder
Новичок в веб-программировании,только учусь. :)

Не могу понять работу метода .map?

Короче говоря,уже весь день сижу с одним методом,и никак не могу понять,как он получает именно то,что нужно.Код прикрепил.
function camelize(str) {
   return str
     .split('-') 
     .map((word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1)) //**
     .join(''); // соединяет ['my', 'Long', 'Word'] в 'myLongWord'
 }
alert(camelize('lol-kek-cheburek'));

Строка,помеченная звёздочкой мне не понятна.Я понимаю,что на вход подаётся строка,я понимаю,что функция меняет её и возвращает значение.Я понимаю,что она убирает "-" и возвращает строку в стиле Верблюжьей нотации.НО!Я не понимаю главное,как в str.map(word,index) index понимает,что является индексом и привязан к номеру буквы в слове,а word понимает,что он - массив,в котором записано это слово.Ведь это никак не описано в функции!Извините,если этот вопрос Вам покажется детским,но я новичок в js-программировании это на данный момент плавит мне мозг наглым образом.
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 4
sergiks
@sergiks Куратор тега JavaScript
♬♬
function camelize(str) { // на вход приходит строка
   return str      // вот тут пока ещё строка
     .split('-')   // здесь из этой строки сделали массив, разбив её по символу дефиса
                   // ниже пошёл массив ["lol", "kek", "cheburek"]
     .map((word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1)) // что-то сделали с каждым элементом массива
     .join(''); // соединяет ['my', 'Long', 'Word'] в 'myLongWord'
 }


Теперь упростим непонятную строку.
К ней пришёл массив, у которого вызывается метод map() – он просто применит функцию в нём к каждому элементу массива. На выходе получится новый массив.
.map((word, index) => index == 0 ? word : word[0].toUpperCase() + word.slice(1)) //**

// то же самое, что:
.map(
  function(word, index) {
     return index == 0 ? word : word[0].toUpperCase() + word.slice(1);
  }
)

// то же самое, что:
.map(
  function(word, index) {
    if (index == 0) {
      return word;
    } else {
      return word[0].toUpperCase() + word.slice(1);
    }
  }
)


Метод массива .map() вызывает функцию, которая в нём аргументом, для каждого элемента массива и передёт в неё следующие три параметра:
  1. Текущий обрабатываемый элемент массива.
  2. Индекс текущего обрабатываемого элемента в массиве.
  3. Массив, по которому осуществляется проход.
Ответ написан
mroforolhc
@mroforolhc
умственно отсталый
как в str.map(word,index) index понимает,что является индексом и привязан к номеру буквы в слове,а word понимает,что он - массив,в котором записано это слово.


Ведь это никак не описано в функции!

Описано. А именно, вот тут:
var new_array = arr.map(function callback(currentValue, index, array) { 
    // Возвращает элемент для new_array 
}[, thisArg])
Ответ написан
l3ftoverz
@l3ftoverz Куратор тега JavaScript
Rings of Saturn - The Husk
map создаёт новый массив от старого, в результате работы переданному ему callback, если написать чуть проще:

.map(function (word, index) {
  if (index == 0) {
    return word;
  } else {
    return word[0].toUpperCase() + word.slice(1));
  }
}


Т.е. массив перебирается и с каждым индексом происходит (или не происходит) какая-то мутация, то, что возвращает функция, становится новым значением индекса.
Ответ написан
@alexalexes
**
Пройдемся по массиву и вернем новый массив с такими элементами:
Если шагнули на нулевой элемент (index == 0), то вернем слово как элемент в новый массив как есть (.... ? word : ....)
Если шагнули на ненулевой элемент, то Меняем регистр у первой буквы (... : word[0].toUpperCase() + word.slice(1)...) и вернем результат как элемент в новый массив.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы