Das liegt daran, dass map
in der Callback-Funktion mehr Argumente als nur das Array-Element übergibt. Du bekommst:
Normalerweise ignoriert Ihre Funktion nur die Argumente, die sie nicht benötigt. Aber parseInt
akzeptiert einen optionalen zweiten Parameter:
für den ersten Aufruf, base
ist index
0
. Das funktioniert gut, weil ECMAScript definiert, dass base=0
dasselbe ist wie das Argument weglassen und folglich Dezimal-, Oktal- oder Hexadezimalwerte (in diesem Fall dezimal) erlaubt.
Für den zweiten und dritten Artikel ist base
1
oder 2
. Es versucht, die Zahl als Base-1 (die nicht existiert) oder Base-2 (Binär) zu analysieren. Da die erste Zahl in der Zeichenfolge eine Ziffer ist, die in diesen Basen nicht existiert, erhalten Sie NaN
.
Im Allgemeinen ist parseInt
ohne Base sowieso ziemlich fraglich, also möchtest du wahrscheinlich:
Das Problem ist, dass map
erwartet, dass der Callback eine Funktion sein soll, die drei Argumente akzeptiert, callbackfn(value, index, array)
.
Das zweite Argument kollidiert mit dem Argument radix
des parseInt(string, radix)
Funktion.
Map ruft parseInt wie folgt für jedes Element auf:
%Vor%Der erste funktioniert, weil wenn radix nicht definiert ist oder 0 ist, wird angenommen, dass er 10 ist.
Array.Filter verwendet eine Funktion, die Informationen zurückgibt, ob das zu bewertende Element die Bedingung erfüllt oder nicht. IsNumeric wird funktionieren, was Sie wollen.
Tags und Links javascript arrays