Przejdź do treści

JS / Array.prototype

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:

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

Czytaj dalej

Aby kontynuować kurs przejdź do poprzedniego lub następnego artykułu:

Komentarze

Zobacz więcej komentarzy

Facebook