Node.JS/Javascript - строка casting to integer возвращает NaN, когда я не ожидал, что это будет
Это все в контексте более крупной программы, поэтому я собираюсь попытаться сохранить ее просто, показывая только оскорбительные строки. У меня есть массив значений, которые являются числами в строковой форме a la "84", "32" и т.д.
И все же эта строка
console.log(unsolved.length + " " + unsolved[0] + " " + parseInt(unsolved[0]) + " " + parseInt("84"));
печатает:
4 "84" NaN 84
"84" - это элемент массива Im, пытающийся parseInt! Однако это не сработает, если я не выберу это из контекста массива и не напишу его явно. Что происходит?
Ответы
Ответ 1
Вы можете попытаться удалить цитаты из строки, подлежащей обработке, с помощью этой функции:
function stripAlphaChars(source) {
var out = source.replace(/[^0-9]/g, '');
return out;
}
Также вы должны явно указать, что вы хотите проанализировать базовый номер 10:
parseInt(unsolved[0], 10);
Ответ 2
parseInt
будет принимать все с самого начала своего аргумента, который выглядит как число, и игнорировать остальные. В вашем случае аргумент, который вы вызываете, начинается с "
, поэтому ничего не похоже на число, и он пытается создать пустую строку, которая действительно не является числом.
Ответ 3
Вы должны убедиться, что элемент массива действительно является строкой, которая может анализироваться на число. Элемент массива не содержит значения '84'
, но фактически значение '"84"'
(строка, содержащая число, инкапсулированное ")
Вы хотите удалить "
из своих элементов массива, возможно так:
function removeQuotationMarks(string) {
return (typeof string === 'string') ? string.replace(/"|'/g, '') : string;
}
unsolved = unsolved.map(removeQuotationMarks);
Теперь все элементы массива должны быть готовы к анализу с помощью parseInt(unsolved[x], 10)
Ответ 4
Сначала нам нужно заменить "на" на предоставление данных с помощью Regex и заменить, а затем нам нужно сделать.
var i = 1;
var j = "22"
function stringToNumber(n) {
return (typeof n === 'string') ? parseInt(Number(n.replace(/"|'/g, ''))) : n;
}
console.log(stringToNumber(i)); // 1
console.log(stringToNumber(j)); // 22