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?
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);
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.
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)
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