Javascript: Map, Reduce ve Filter — Bölüm 4
Bu bölümde kahramanlarımızı, zincirleme yöntemi ile birlikte kullanacağız. reduce()
hakkında detaylı bilgiye aşağıdaki yazıdan ulaşabilirsiniz
Previously on “Avengers”
Avengers
Aşağıdaki diziden kadınların yaşları ve puanlarının toplamını hesaplayalım.
1 2 3 4 5 6 7 8 9 10 11 |
const kisiler = [ {id: 1, adi: 'Ahmet', soyadi: 'Yüksekseslekonuşma', yas: 15, cinsiyet: 'Erkek', unvan: 'Öğrenci', puan: 65}, {id: 2, adi: 'Sultan', soyadi: 'Hayvanlarısev', yas: 32, cinsiyet: 'Kadın', unvan: 'Öğretmen', puan: 75}, {id: 3, adi: 'Hatiçe', soyadi: 'Çimenlerebasma', yas: 26, cinsiyet: 'Kadın', unvan: 'Doktor', puan: 85}, {id: 4, adi: 'Ali', soyadi: 'Yerleretükürme', yas: 26, cinsiyet: 'Erkek', unvan: 'İşçi', puan: 75}, {id: 5, adi: 'Kamuran', soyadi: 'Kurallarauy', yas: 52, cinsiyet: 'Kadın', unvan: 'Öğretmen', puan: 95} ]; |
Yöntem-1: for
ile sonuca ulaşalım. Denemek için tıklayınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
const kisiler = [ {id: 1, adi: 'Ahmet', soyadi: 'Yüksekseslekonuşma', yas: 15, cinsiyet: 'Erkek', unvan: 'Öğrenci', puan: 65}, {id: 2, adi: 'Sultan', soyadi: 'Hayvanlarısev', yas: 32, cinsiyet: 'Kadın', unvan: 'Öğretmen', puan: 75}, {id: 3, adi: 'Hatice', soyadi: 'Çimenlerebasma', yas: 26, cinsiyet: 'Kadın', unvan: 'Doktor', puan: 85}, {id: 4, adi: 'Ali', soyadi: 'Yerleretükürme', yas: 26, cinsiyet: 'Erkek', unvan: 'İşçi', puan: 75}, {id: 5, adi: 'Kamuran', soyadi: 'Kurallarauy', yas: 52, cinsiyet: 'Kadın', unvan: 'Öğretmen', puan: 95} ]; let sonuc = 0; for (var i = 0; i < kisiler.length; i++){ if (kisiler[i].cinsiyet === 'Kadın'){ let tempSonuc = kisiler[i].yas + kisiler[i].puan ; sonuc += tempSonuc } } console.log(sonuc); |
Yöntem-2: filter(), map(), reduce()
kullanarak hesaplayalım. Denemek için tıklayınız.
- Diziden cinsiyeti ‘Kadın’ olanları seç.
filter()
ile yapılacak - Kızların yaşına puanlarını ekle.
map()
ile yapılacak - Sonuçları topla.
reduce()
ile yapılacak
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
const kisiler = [ {id: 1, adi: 'Ahmet', soyadi: 'Yüksekseslekonuşma', yas: 15, cinsiyet: 'Erkek', unvan: 'Öğrenci', puan: 65}, {id: 2, adi: 'Sultan', soyadi: 'Hayvanlarısev', yas: 32, cinsiyet: 'Kadın', unvan: 'Öğretmen', puan: 75}, {id: 3, adi: 'Hatice', soyadi: 'Çimenlerebasma', yas: 26, cinsiyet: 'Kadın', unvan: 'Doktor', puan: 85}, {id: 4, adi: 'Ali', soyadi: 'Yerleretükürme', yas: 26, cinsiyet: 'Erkek', unvan: 'İşçi', puan: 75}, {id: 4, adi: 'Kamuran', soyadi: 'Kurallarauy', yas: 52, cinsiyet: 'Kadın', unvan: 'Öğretmen', puan: 95} ]; const sonuc = kisiler.filter(x =>{ return x.cinsiyet === 'Kadın' ? x : null }).map (y => { return y.yas+y.puan; }).reduce((acc, z)=>{ return acc+ z },0) ; console.log(sonuc) |
Sonucu daha temiz kod ile çözüm. Denemek için tıklayınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
const kisiler = [ {id: 1, adi: 'Ahmet', soyadi: 'Yüksekseslekonuşma', yas: 15, cinsiyet: 'Erkek', unvan: 'Öğrenci', puan: 65}, {id: 2, adi: 'Sultan', soyadi: 'Hayvanlarısev', yas: 32, cinsiyet: 'Kadın', unvan: 'Öğretmen', puan: 75}, {id: 3, adi: 'Hatice', soyadi: 'Çimenlerebasma', yas: 26, cinsiyet: 'Kadın', unvan: 'Doktor', puan: 85}, {id: 4, adi: 'Ali', soyadi: 'Yerleretükürme', yas: 26, cinsiyet: 'Erkek', unvan: 'İşçi', puan: 75}, {id: 4, adi: 'Kamuran', soyadi: 'Kurallarauy', yas: 52, cinsiyet: 'Kadın', unvan: 'Öğretmen', puan: 95} ]; const kadinlar = (x) => {return x.cinsiyet === 'Kadın' ? x : null} const yasVePuanTopla = (x) => {return x.yas+x.puan;} const degerleriTopla = (acc, x)=>{return acc+ x} const sonuc = kisiler.filter(kadinlar) .map(yasVePuanTopla) .reduce(degerleriTopla,0) ; console.log(sonuc); |
Hangisi daha güçlü? Tarafını seç.