2016-08-30 4 views
1

Ich habe einige Szenarien mit Array-Reduce-Funktion getestet.Explizite Weitergabe des Anfangswerts als undefiniert in Array reduzieren

[1,2].reduce(function(initial , val){ 

     return initial+val; 
    } ,1) 
    // returns 4 as expected 


[1,2].reduce(function(initial , val){ 

    return initial+val; 
}) 
// returns 3 

aber ausdrücklich undefined als Anfangswert vorbei

[1,2].reduce(function(initial , val){ 

    return initial+val; 
}, undefined) 
// returns NaN. 

Es scheint mir ungewöhnlich.

+0

Kasse die Syntax der Array reduzieren '' 'arr.reduce (Callback [, initial ]) '' 'Dabei wird der Anfangswert als erstes Argument für den ersten Aufruf des Callbacks verwendet. –

+0

Ich habe das gesehen. Im ersten Fall ignoriert es das anfängliche undefinierte aber im zweiten Fall gibt es NaN zurück. Lassen Sie mich ein weiteres Beispiel zur besseren Übersicht hinzufügen – ajaykumar

+0

es ist, weil Sie versuchen, '' '' undefined'' mit einer Zahl zu versuchen '' '[1,2] .reduce (function (initial, val)) { initial = initial ? initial: 0 return initial + val; }, undefined) '' ' –

Antwort

3

Explaination here:

Hinweis: Wenn initialValue nicht vorgesehen ist, reduzieren wird die Callback-Funktion ab Index 1, Überspringen den ersten Index auszuführen. Wenn initialValue vorgesehen ist, wird es bei Index 0.

So Ihre zweite Fall ist ähnlich wie diese starten:

[2].reduce(function(initial, val){ 
    return initial+val; 
}, 1) 
+0

Ich denke, das ist die richtige Erklärung. – ajaykumar

Verwandte Themen