Przejdź do głównej treści
eLearner.app
Moduł 6 · Lekcja 2 z 422/32 w kursie~12 min
Lekcje modułu (2/4)

reduce

reduce to najpotężniejsza z metod funkcyjnych tablic: iteruje po kolekcji, przechowując akumulator, który jest aktualizowany na każdym kroku. Po zakończeniu iteracji zwraca akumulator.

Sygnatura

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc zaczyna od wartości valoreIniziale.
  • Dla każdego elementu obliczana jest nowa wartość acc.
  • Wynikiem końcowym jest ostatnia wartość acc.

Podstawowe przykłady: suma i iloczyn

JS
const numeri = [3, 1, 4, 1, 5];

const somma = numeri.reduce((a, n) => a + n, 0);
// 14

const prodotto = numeri.reduce((a, n) => a * n, 1);
// 60

Bez wartości początkowej reduce zaczyna od pierwszego elementu (ryzykowne w przypadku potencjalnie pustych tablic → błąd). Zawsze przekazuj wartość początkową, gdy to możliwe.

Budowanie obiektu: zliczanie wystąpień

JS
const parole = ['mela', 'pera', 'mela', 'kiwi', 'mela'];

const conteggio = parole.reduce((acc, p) => {
  acc[p] = (acc[p] ?? 0) + 1;
  return acc;
}, {});
// { mela: 3, pera: 1, kiwi: 1 }

Znajdowanie maksimum / minimum

JS
const nums = [3, 7, 1, 9, 4];

const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9

(W praktyce do wyznaczania max/min lepiej użyć Math.max(...nums); to jest przykład edukacyjny.)

Spróbuj sam

Ćwiczenie#js.m6.l2.e1
Próby: 0Ładowanie...

Zdefiniuj funkcję `total(items)`: otrzymujesz tablicę obiektów { price, quantity } i zwracasz całkowity koszt (sumę price*quantity). Użyj reduce.

Ładowanie edytora...
Pokaż wskazówkę

reduce((a, it) => a + it.price * it.quantity, 0)

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#js.m6.l2.e2
Próby: 0Ładowanie...

Zdefiniuj funkcję `count(words)`: dla danej tablicy ciągów znaków zwróć obiekt mapujący każdy ciąg na liczbę jego wystąpień. Użyj reduce z obiektem jako akumulatorem.

Ładowanie edytora...
Pokaż wskazówkę

acc[p] = (acc[p] ?? 0) + 1; return acc;

Rozwiązanie dostępne po 3 próbach