JavaScript 1.6 Array.map () und Array.filter () arbeiten nicht mit eingebauten Funktionen als Argumente

8

Das funktioniert gut:

%Vor%

Aber das nicht:

%Vor%

Dasselbe gilt für Array.filter ()

Was fehlt mir hier?

    
bucabay 15.04.2010, 18:01
quelle

3 Antworten

20

Das liegt daran, dass map in der Callback-Funktion mehr Argumente als nur das Array-Element übergibt. Du bekommst:

%Vor%

Normalerweise ignoriert Ihre Funktion nur die Argumente, die sie nicht benötigt. Aber parseInt akzeptiert einen optionalen zweiten Parameter:

%Vor%

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:

%Vor%     
bobince 15.04.2010, 18:15
quelle
5

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.

    
CMS 15.04.2010 18:15
quelle
1

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.

Ссылка

    
kemiller2002 15.04.2010 18:04
quelle

Tags und Links