316 votes

JavaScript - tableau #map et parseInt

À partir de la Mozilla Site Dev:

[1,4,9].map(Math.sqrt)

rendement:

[1,2,3]

Alors pourquoi cette:

['1','2','3'].map(parseInt)

rendement ceci:

[1, NaN, NaN]

Je l'ai testé dans Firefox 3.0.1 et Chrome 0,3 et comme un avertissement, je sais que ce n'est pas de la croix-des fonctionnalités du navigateur. (Pas de IE)

[modifier] J'ai trouvé que la suite sera de réaliser l'effet désiré. Cependant, il n'est toujours pas expliquer le comportement errant de parseInt.

['1','2','3'].map(function(i){return +i;}) // returns [1,2,3]

513voto

Alnitak Points 143355

La fonction de rappel en Array.map a trois paramètres:

De la même Mozilla page que vous avez lié à:

callback n'est appelé avec trois arguments: la valeur de l'élément, l'indice de l'élément, et l'objet de Tableau de traversée."

Donc, si vous appelez une fonction qui, en fait, attend deux arguments, le second argument est l'indice de l'élément.

Dans ce cas, vous avez fini par appeler parseInt avec radix 0, 1 et 2 à tour de rôle. La première est la même que ne fournit pas le paramètre, donc elle a fait défaut de la base 10. La Base 1 est impossible à nombre de la base, et 3 n'est pas un nombre valide en base 2:

parseInt('1', 0); // OK - gives 1
parseInt('2', 1); // FAIL - 1 isn't a legal radix
parseInt('3', 2); // FAIL - 3 isn't legal in base 2 

11voto

Peter Bailey Points 62125

Je vais parier que c’est quelque chose de funky passe avec 2ème paramètre de parseInt le radix. Pourquoi c’est la rupture avec l’utilisation de Array.map et pas quand vous l’appelez directement, je ne sais pas.

-2voto

aRkadeFR Points 164

Solution rapide:

 ['10', '10', '10', '10', '10'].map(parseInt.bind(null, 10))
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X