web-dev-qa-db-fra.com

Node.JS/Javascript - La conversion d'une chaîne en un entier renvoie NaN alors je ne m'y attendais pas

Tout cela est dans le contexte d'un programme plus vaste, alors je vais essayer de garder les choses simples, en ne montrant que les lignes incriminées. J'ai un tableau de valeurs qui sont des nombres sous forme de chaîne à la "84", "32", etc. 

Pourtant, cette ligne

console.log(unsolved.length + " " + unsolved[0] + " " + parseInt(unsolved[0]) + " " + parseInt("84"));

impressions:

4 "84" NaN 84

"84" est l'élément de tableau que je cherche à analyser! Pourtant, cela ne fonctionnera que si je le retire du contexte d’un tableau et l’écris explicitement. Que se passe-t-il?

10

Vous pouvez essayer de supprimer les citations de la chaîne à traiter à l'aide de cette fonction:

function stripAlphaChars(source) { 
  var out = source.replace(/[^0-9]/g, ''); 

  return out; 
}

Aussi, vous devez explicitement spécifier que vous souhaitez analyser un nombre base 10:

parseInt(unsolved[0], 10);
11
Alex W

parseInt prendrait tout au début de son argument qui ressemble à un nombre et ignorerait le reste. Dans votre cas, l'argument avec lequel vous l'appelez commence par ", donc rien ne ressemble à un nombre et il tente de convertir une chaîne vide, qui n'est en réalité pas un nombre.

7
lanzz

Vous devez vous assurer que l'élément de tableau est bien une chaîne qu'il est possible d'analyser en un nombre. Votre élément de tableau ne contient pas la valeur '84', mais bien la valeur '"84"' (une chaîne contenant un nombre encapsulé par ")

Vous voudrez supprimer le " de vos éléments de tableau, comme suit:

function removeQuotationMarks(string) {
  return (typeof string === 'string') ? string.replace(/"|'/g, '') : string;
}

unsolved = unsolved.map(removeQuotationMarks);

Maintenant, tous les éléments du tableau doivent être prêts à être analysés avec parseInt(unsolved[x], 10)

3
Saebekassebil

Tout d'abord, nous devons remplacer "to" dans les données en utilisant Regex, puis nous devons remplacer.

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

0
KARTHIKEYAN.A