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