2013-02-20 15 views
6

Właśnie zacząłem odkrywać bibliotekę podkreslenia JavaScript bardziej dogłębnie i po prostu chcę wyjaśnić, co myślę, że _.reduce() (znany również jako inject i foldl) ma rację. Moje pytanie brzmi: czy poniżej jest prawo?Podkreślenie _.reduce wyjaśnienie?

Kiedy _.reduce([1, 2, 3, 4, 5], function(memo, num) { return memo + num; }, 5); nazywa dodaje się dzieje:

  • memo rozpoczyna się 5
  • memo + list[0] = memo = 6
  • memo + list[1] = memo = 8
  • memo + list[2] = memo = 11
  • memo + list[3] = memo = 15
  • memo + list[4] = memo = 20

I dlatego funkcja ran powraca 20. Czy to prawda? I dlatego _.reduceRight() jest odwrotnie i zaczyna się od memo + list[ /* last element in array */ ]?

Dzięki.

Pozdrawiam.

Odpowiedz

11

Tak, zgadza się. Pierwszy argument wywołania zwrotnego reduce reprezentuje wartość zwróconą z ostatniej iteracji (lub zarodka w pierwszej iteracji).

Drugi argument wywołania zwrotnego to wartość bieżącej iteracji tablicy.

Jako taki, pierwszym argumentem jest akumulator o dowolnym wyniku, do którego próbujesz dotrzeć. Końcowa wartość jest zwracana z funkcji _.reduce po zakończeniu wszystkich iteracji.

+0

Dzięki, bardzo; wszystko czego chciałem. Miłego dnia. – raf

+0

Nie ma za co. –