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: Я сам голосовал, чтобы закрыть этот вопрос. Довольно очевидная ошибка. спасибо ребята!
parseInt
принимает 2 аргумента:
.map
вызывает вашу функцию с тремя аргументами:
Если вы думаете об этом,
parseInt("00", 1)
на самом деле не имеет смысла, и он возвращает NaN
. parseInt
принимает радики между 2 и 36.
Второй аргумент parseInt
- это основание или основание (например, 10, 16 и т.д., По умолчанию - основание 10). .map
передает два аргумента для обратного вызова, значение в этом индексе, а также индекс. Итак, вы вызываете parseInt(10, 0)
который пытается выяснить, что 10 находится в базе 0.
.map()
вызывает функцию с тремя аргументами: элемент массива, индекс массива и массив. parseInt
принимает 2 параметра: строку для синтаксического анализа и базу для ее анализа.
Поэтому startStr.map(parseInt)
вызывает:
parseInt("10", 0, startStr);
parseInt("00", 1, startStr);
По-видимому parseInt()
обрабатывает radix = 0
как никакой radix, поэтому по умолчанию он равен base 10. Но radix = 1
вообще не имеет никакого смысла, поэтому он возвращает NaN
.
var res = startStr.map(x=>parseInt(x));
как таковой не миллион миль того, что вы сделали.