Przejdź do treści

Redukowanie tablicy do wartości - reduce

Jak zredukować tablicę do pojedynczej prostej wartości?

(interpretuje: Internet Explorer 9, Firefox, Opera 10.50, Chrome)

Array.prototype.reduce(callbackfn)
Array.prototype.reduce(callbackfn, initialValue)
Parametry:
Function callbackfn - funkcja zwracająca zredukowaną wartość i przyjmująca argumenty:
  • accumulator - dotychczasowa zredukowana wartość
  • kValue - element tablicy
  • Number k - indeks elementu tablicy
  • Array O - oryginalna tablica
initialValue - wartość początkowa (domyślnie: element o najniższym indeksie jawnie dodanym do tablicy)
Wartość:
zredukowana wartość tablicy
Wyjątki:
TypeError - callbackfn nie jest funkcją albo nie podano initialValue podczas gdy do tablicy nie dodano jawnie żadnych elementów

Przechodzi kolejno przez wszystkie elementy tablicy, redukując ją do pojedynczej wartości. Elementy, które nie zostały jawnie dodane do tablicy, są pomijane.

Pozwala obliczyć np. silnię lub sumę wszystkich elementów tablicy.

Przykład Array.prototype.reduce

var items = [3, 2, 1];
 
var f = function (a, x) {
    a += x;
    return a;
};
items.reduce(f, 0);      // 6
 
var GreaterThan = function (value) {
    this.value = value;
    this.tests = 0;
};
GreaterThan.prototype.test = function (sum, value) {
    ++this.tests;
    if (value > this.value) sum += value;
    return sum;
};
 
tester = new GreaterThan(1);
f = tester.test.bind(tester);
items.reduce(f);         // 5
tester.tests;            // 2
 
tester = new GreaterThan(1);
f = tester.test.bind(tester);
items.reduce(f, 0);      // 5
tester.tests;            // 3
 
items = [1, 2];
items[3] = 3;
items.length;            // 4
tester = new GreaterThan(0);
f = tester.test.bind(tester);
items.reduce(f, 0);      // 6
tester.tests;            // 3
 
items[2] = undefined;
items.length;            // 4
tester = new GreaterThan(0);
f = tester.test.bind(tester);
items.reduce(f, 0);      // 6
tester.tests;            // 4
 
items.reduce(null);      // TypeError
items.reduce(undefined); // TypeError
items.reduce({});        // TypeError
[].reduce(f);            // TypeError
new Array(3).reduce(f);  // TypeError

Komentarze

Zobacz więcej komentarzy

Facebook