["1", "2", "111"].map(parseInt);  // returns [1, NaN, 7]

Вы когда-нибудь пробовали передать parseInt методу map массива?

Если еще нет, я скажу, попробуйте сейчас. Это очень интересно.

Когда мы пробуем это в первый раз, это выглядит очень запутанно, но как только мы понимаем логику, все становится легко понять.

Чтобы понять, как это работает, нам нужно понять, как работают методы map и parseInt.

Метод карты массива

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

  • Текущий объект
  • Текущий индекс
  • Исходный массив

В нашем случае эта функция обратного вызова — parseInt. Таким образом, parseInt будет вызываться для каждого элемента массива, и его результат будет добавлен во вновь созданный массив.

Отсюда наш код

["1", "2", "111"].map(parseInt);

будет выполняться как

parseInt("1", 0, ["1", "2", "111"]);         // 1
parseInt("2", 1, ["1", "2", "111"]);         // NaN
parseInt("111", 2, ["1", "2", "111"]);       // 7

метод parseInt

Метод parseInt используется для преобразования строки в целое число. Мы могли бы использовать этот метод много раз, но без использования его второго (необязательного) параметра. Этот второй параметр используется для указания системы счисления.

Поэтому, когда вызывается parseInt("1", 0, ["1", "2", "111"]);, он пытается преобразовать
"1" в целое число с основанием 0, поэтому возвращает 1.

Точно так же parseInt("2", 1, ["1", "2", "111"]); пытается преобразовать
"2" в целое число с основанием 1, поэтому возвращает NaN.

Точно так же parseInt("111", 2, ["1", "2", "111"]); пытается преобразовать
"111" в целое число с основанием 2, поэтому возвращает 7.

Следовательно, ["1", "2", "111"].map(parseInt); возвращает [1, NaN, 7]

Вывод

parseInt может оказаться сложным, если его передать функциям более высокого порядка, таким как map в Array. Мы должны проявлять особую осторожность при передаче parseInt в качестве функции обратного вызова.