2012-08-01 22 views
7

Zgodnie z dokumentacją underscore-reduce powinienem podać trzy parametry.Podkreślenie zmniejsza, o notatce

Na przykład:

var m = _.reduce([1,2,3], function (memo, num) {return (num * 2) +memo }, 0); 
m; // 12 as expected 

Gdy próbuję przekazać tylko dwa pierwsze parametry dostaję inną wartość. Czemu?

var m = _.reduce([1,2,3], function (memo, num) {return (num * 2) +memo }); 
m; // 11 ..why? 

Odpowiedz

6

Z tylko dwa parametry przekazywane do reduce, użyje pierwszej i drugiej pozycji tablicy jako argumenty do pierwszego wywołania funkcji.

function addDouble(memo, num) {return (num * 2) +memo } 

[1,2,3].reduce(addDouble, 0) 
// is equivalent to 
addDouble(addDouble(addDouble(0, 1), 2), 3) 

[1,2,3].reduce(addDouble) 
// is equivalent to 
addDouble(addDouble(1, 2), 3) 

Zazwyczaj można przekazać wartość początkową, ale wiele operacji mają ten sam wynik podczas uruchamiania bez ich identity element. Na przykład:

function add(a, b) { return a+b; } 
function double(a) { return 2*a; } 

[1,2,3].map(double).reduce(add) == [1,2,3].map(double).reduce(add, 0) 

Zobacz także dokumenty dla native reduce().

0

Po prostu przekazanie dwóch parametrów, początkowa notatka zajmie pierwszą wartość tablicy i przejdzie przez resztę. 11 = 1 + (2 * 2) + (3 * 3). dlatego. A jeśli przejdziesz trzy parametry, notatka przyjmie trzeci parametr jako początkowe menu i przejdzie przez każdy element tablicy.

Powiązane problemy