Array.map + parseInt [duplicate]

1
var timeSplit = timeCaption.innerText.trim().split(' ');

даст массив ["10:00", "–", "18:00"]

var startStr = timeSplit[0].split(':');

даст массив из ["10", "00"]

var res = startStr.map(parseInt);

даст массив [10, NaN]

тем не мение

var res = startStr.map(function (x) {
   return parseInt(x);
});

работает правильно и даст "ожидаемый" массив [10, 0]

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

Что мне здесь не хватает?

edit: Я сам голосовал, чтобы закрыть этот вопрос. Довольно очевидная ошибка. спасибо ребята!

  • 0
    Просто наперед, если вы хотите сократить это, чтобы избежать синтаксиса функции / возврата и можете использовать функции es6. вы можете просто сделать -> var res = startStr.map(x=>parseInt(x)); как таковой не миллион миль того, что вы сделали.
  • 0
    да, я знаю, я взламываю плагин, в котором я не настраивал транспортеры es2015, просто полностью "забыл", как работает карта
Теги:
arrays
parseint

3 ответа

5
Лучший ответ

parseInt принимает 2 аргумента:

  1. строка, подлежащая анализу
  2. основание системы счисления

.map вызывает вашу функцию с тремя аргументами:

  1. Значение
  2. индекс
  3. массив

Если вы думаете об этом,

parseInt("00", 1)

на самом деле не имеет смысла, и он возвращает NaN. parseInt принимает радики между 2 и 36.

  • 0
    да ты прав, спасибо
  • 0
    Невероятно, что я не мог узнать это сам, прежде чем читать этот ответ X- (
1

Второй аргумент parseInt - это основание или основание (например, 10, 16 и т.д., По умолчанию - основание 10). .map передает два аргумента для обратного вызова, значение в этом индексе, а также индекс. Итак, вы вызываете parseInt(10, 0) который пытается выяснить, что 10 находится в базе 0.

0

.map() вызывает функцию с тремя аргументами: элемент массива, индекс массива и массив. parseInt принимает 2 параметра: строку для синтаксического анализа и базу для ее анализа.

Поэтому startStr.map(parseInt) вызывает:

parseInt("10", 0, startStr);
parseInt("00", 1, startStr);

По-видимому parseInt() обрабатывает radix = 0 как никакой radix, поэтому по умолчанию он равен base 10. Но radix = 1 вообще не имеет никакого смысла, поэтому он возвращает NaN.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню