Gestion des bases dans les appels Array#map parseInt
Dans le contexte des tableaux JavaScript, la méthode map transforme chaque élément à l'aide d'une fonction de rappel fournie . Bien que map puisse appliquer avec succès Math.sqrt sur des nombres, son comportement avec parseInt sur des chaînes peut prêter à confusion.
On pourrait s'attendre à ce que ['1', '2', '3'].map(parseInt) renvoie [1, 2, 3]. Cependant, cela donne en réalité [1, NaN, NaN]. Cette bizarrerie provient du paramètre radix de parseInt.
Le rôle de Radix dans parseInt
parseInt attend deux arguments : la valeur à convertir et la base. Si la base est omise, il utilise la « meilleure estimation » basée sur l'entrée.
Dans le cas de ['1', '2', '3'].map(parseInt), la base devient l'index de chaque élément lors de l'itération du tableau. Ainsi, il finit par appeler :
parseInt('1', 0); // Correct (radix defaults to 10) parseInt('2', 1); // Invalid radix (not a number base) parseInt('3', 2); // Invalid number in base 2
Résoudre le problème
Pour résoudre ce problème et obtenir le résultat souhaité [1, 2, 3], vous pouvez utilisez une fonction wrapper comme celle-ci :
['1', '2', '3'].map(function(num) { return parseInt(num, 10); });
ou avec ES2015 syntaxe :
['1', '2', '3'].map(num => parseInt(num, 10));
Ici, la base est explicitement définie sur 10, garantissant une analyse correcte.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!