web-dev-qa-db-fra.com

convertir une chaîne en nombre node.js

J'essaie de convertir req.params en nombre parce que c'est ce que j'ai défini dans mon schéma pour l'année param.

J'ai essayé

req.params.year = parseInt( req.params.year, 10 );  

et

Number( req.params.year);

et

1*req.params.year;

mais pas d'entre eux fonctionne. Dois-je installer quelque chose?

44
user3488862

Vous n'êtes pas obligé d'installer quelque chose.

parseInt(req.params.year, 10);

devrait fonctionner correctement.

console.log(typeof parseInt(req.params.year)); // returns 'number'

Quelle est votre sortie si vous utilisez parseInt? est-ce toujours une chaîne?

91
Tusk

Utiliser parseInt () est une mauvaise idée principalement parce qu’il n’échoue jamais. De plus, certains résultats peuvent être inattendus, comme dans le cas d'INFINITY.
Ci-dessous se trouve la fonction permettant de gérer un comportement inattendu.

function cleanInt(x) {
    x = Number(x);
    return x >= 0 ? Math.floor(x) : Math.ceil(x);
}

Voir les résultats des cas de test ci-dessous.

console.log("CleanInt: ", cleanInt('xyz'), " ParseInt: ", parseInt('xyz'));
console.log("CleanInt: ", cleanInt('123abc'), " ParseInt: ", parseInt('123abc'));
console.log("CleanInt: ", cleanInt('234'), " ParseInt: ", parseInt('234'));
console.log("CleanInt: ", cleanInt('-679'), " ParseInt: ", parseInt('-679'));
console.log("CleanInt: ", cleanInt('897.0998'), " ParseInt: ", parseInt('897.0998'));
console.log("CleanInt: ", cleanInt('Infinity'), " ParseInt: ", parseInt('Infinity'));

résultat:

CleanInt:  NaN  ParseInt:  NaN
CleanInt:  NaN  ParseInt:  123
CleanInt:  234  ParseInt:  234
CleanInt:  -679  ParseInt:  -679
CleanInt:  897  ParseInt:  897
CleanInt:  Infinity  ParseInt:  NaN
4
tejp124

Pas une réponse complète Ok il ne s'agit donc que de compléter les informations sur parseInt, qui sont toujours très valables. Express n'autorise aucune modification des objets req ou res (immuable). Donc, si vous voulez modifier/utiliser ces données efficacement, vous devez les copier dans une autre variable (var year = req.params.year).

0
Werlious