Ana içeriğe geç
Modül 6 · Ders 2 ders 4Kurstaki 22/32~12 min
Modül dersleri (2/4)

azaltmak

reduce işlevsel dizi yöntemlerinin en güçlüsüdür: koleksiyon boyunca yürür her adımda güncellenen bir akümülatör tutmak. Döngü bittiğinde geri döner akümülatör.

İmza

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc valoreIniziale'de başlar.
  • Her öğe için yeni bir acc hesaplanır.
  • Nihai sonuç son acc'dir.

Temel örnekler: toplam ve çarpım

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

Başlangıç değeri olmadan, reduce ilk öğeden başlar (potansiyel olarak boş olması risklidir) diziler → hata). Mümkünse her zaman bir başlangıç ​​değeri iletin.

Bir nesne oluşturmak: sayma

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 }

Maksimum / minimum bulma

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

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

(Uygulamada maksimum/minimum için Math.max(...nums) tercih edilir; bu didaktik bir örnektir.)

Deneyin

Egzersiz#js.m6.l2.e1
Denemeler: 0Yükleniyor…

'Toplam(öğeler)'i tanımlayın: bir dizi nesne (fiyat, miktar) alırsınız ve toplam harcamayı (fiyat*miktar toplamı) döndürürsünüz. Azaltmayı kullanın.

Düzenleyici yükleniyor…
İpucu göster

azalt((a, it) => a + it.fiyat * it.miktar, 0)

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#js.m6.l2.e2
Denemeler: 0Yükleniyor…

'Sayı(kelimeler)'i tanımlayın: Bir dize dizisi verildiğinde, her dizeyi oluşum sayısına eşleyen bir nesne döndürün. Bir nesne akümülatörüyle azaltmayı kullanın.

Düzenleyici yükleniyor…
İpucu göster

acc[p] = (acc[p] ?? 0) + 1; acc'yi iade edin;

3 denemeden sonra çözüm mevcut