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
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);accvaloreIniziale'de başlar.- Her öğe için yeni bir
acchesaplanır. - Nihai sonuç son
acc'dir.
Temel örnekler: toplam ve çarpım
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);
// 60Baş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
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
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
'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.
İ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
'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.
İpucu göster
acc[p] = (acc[p] ?? 0) + 1; acc'yi iade edin;
3 denemeden sonra çözüm mevcut