Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Web Geliştirmede JavaScript'te `map()`, `filter()` ve `reduce()` ile Veri Dönüşüm Sanatı 🪄

devnix

Üye
Katılım
14 Mart 2026
Mesajlar
9
Web Geliştirmede JavaScript'te `map()`, `filter()` ve `reduce()` ile Veri Dönüşüm Sanatı 🪄

Selam dostlar! 👋 Uzun süredir forumda backend ağırlıklı paylaşımlar yapıyordum, bugün biraz frontend tarafına, özellikle de JavaScript'in belki de en güçlü ve en sık karıştırılan üçlüsüne değinmek istiyorum. Yeni başlayan arkadaşların genelde `for` döngülerinden kurtulamadığını görüyorum. Halbuki `map`, `filter` ve `reduce` metodları, kodunuzu daha okunabilir, bakımı kolay ve fonksiyonel hale getirmenin anahtarı. Gelin bu sihirli araçları birlikte inceleyelim.

Neden `for` Döngüsü Değil de Bu Metotlar?
Öncelikle şunu netleştirelim: `for` döngüsü kötü değil! Ancak modern JavaScript'te, bir diziyi dönüştürmek, filtrelemek veya tek bir değere indirgemek istediğimizde bu üç metot çok daha şık ve amaca yönelik çözümler sunar. Avantajları:
  • Daha az kod, daha çok anlam.
  • Yan etkileri (side effects) azaltır, saf fonksiyonlar yazmayı teşvik eder.
  • Zincirleme (chaining) yaparak birden fazla işlemi arka arkaya kolayca gerçekleştirebilirsiniz.

1. `map()`: "Dönüştürücü" 🗺️
`map()` metodu, bir dizinin her bir elemanını alır, üzerinde bir işlem yapar ve yeni bir dizi olarak döndürür. Orijinal dizi asla değişmez!

Kod:
const sayilar = [1, 2, 3, 4, 5];

// Her bir sayının karesini alalım (for döngüsü ile)
const karelerFor = [];
for (let i = 0; i < sayilar.length; i++) {
  karelerFor.push(sayilar[i] * sayilar[i]);
}

// Aynı işlemi map ile yapalım
const karelerMap = sayilar.map(sayi => sayi * sayi);

console.log(karelerMap); // [1, 4, 9, 16, 25]
console.log(sayilar); // [1, 2, 3, 4, 5] (orijinal dizi bozulmadı!)

Gerçek hayattan bir örnek: API'den gelen kullanıcı listesinde sadece isimleri almak istiyorsunuz.
Kod:
const kullanicilar = [
  { id: 1, ad: "Ahmet", yas: 30 },
  { id: 2, ad: "Mehmet", yas: 25 },
];

const isimler = kullanicilar.map(kullanici => kullanici.ad);
console.log(isimler); // ["Ahmet", "Mehmet"]

2. `filter()`: "Eleme Ustası" 🎯
`filter()` metodu, belirlediğiniz bir koşula göre diziyi elemenizi sağlar. Koşulu sağlayan elemanlar yeni bir diziye konulur.

Kod:
const sayilar = [10, 15, 23, 4, 7, 18];

// 10'dan büyük sayıları filtreleyelim
const buyukSayilar = sayilar.filter(sayi => sayi > 10);
console.log(buyukSayilar); // [15, 23, 18]

Pratik örnek: Sepetteki belirli bir fiyatın üzerindeki ürünleri listelemek.
Kod:
const sepet = [
  { urun: "Laptop", fiyat: 15000 },
  { urun: "Mouse", fiyat: 250 },
  { urun: "Klavye", fiyat: 500 },
  { urun: "Monitör", fiyat: 4500 },
];

const pahaliUrunler = sepet.filter(urun => urun.fiyat > 1000);
console.log(pahaliUrunler);
// [{ urun: "Laptop", fiyat: 15000 }, { urun: "Monitör", fiyat: 4500 }]

3. `reduce()`: "Hesap Makinesi" ⚙️
Bu, belki de en güçlü ama en korkulan metot. `reduce()`, bir diziyi tek bir değere indirger. Bu değer sayı, dizi, obje... her şey olabilir! İki temel parametre alır: bir akümülatör (acc) ve mevcut dizi elemanı `(curr)`.

Kod:
const sayilar = [1, 2, 3, 4, 5];

// Dizideki tüm sayıların toplamını bulalım
const toplam = sayilar.reduce((acc, curr) => {
  return acc + curr;
}, 0); // 0, başlangıç değeri (acc ilk bu oluyor)

console.log(toplam); // 15

`reduce()` sadece toplama için değil, çok yönlüdür! Örneğin, bir diziyi nesneye dönüştürmek:
Kod:
const urunler = ["Laptop", "Mouse", "Klavye"];

// Her ürün için stok durumu 10 olan bir nesne oluşturalım.
const stokDurumu = urunler.reduce((acc, urun) => {
  acc[urun] = 10;
  return acc;
}, {});

console.log(stokDurumu);
// { Laptop: 10, Mouse: 10, Klavye: 10 }

Büyük Sihir: Zincirleme (Chaining) 🔗
İşte bu üçlünün asıl gücü burada ortaya çıkıyor! Metotlar yeni dizi döndürdüğü için, sonucu bir sonraki metoda besleyebilirsiniz.

Kod:
const veri = [15, 3, 22, 8, 17, 4, 30];

// 10'dan büyük sayıları bul, ikiyle çarp ve hepsini topla.
const sonuc = veri
  .filter(sayi => sayi > 10) // [15, 22, 17, 30]
  .map(sayi => sayi * 2)     // [30, 44, 34, 60]
  .reduce((acc, curr) => acc + curr, 0); // 168

console.log("Sonuç:", sonuc); // Sonuç: 168

Bu kadar temiz ve anlaşılır bir kod zinciri yazmak, iç içe geçmiş `for` döngüleriyle mümkün değil.

Hangi Durumda Hangisini Kullanmalı?
  • `map()`: "Bu dizinin her elemanını değiştirip yeni bir dizi istiyorum" dediğinizde.
  • `filter()`: "Bu diziden sadece bazı elemanları seçip yeni bir dizi istiyorum" dediğinizde.
  • `reduce()`: "Bu diziyi alıp ondan tek bir şey (sayı, dizi, nesne) çıkarmak istiyorum" dediğinizde.

Umarım bu rehber, bu güçlü araçları anlamanıza ve projelerinizde güvenle kullanmanıza yardımcı olur. 🚀 Başlangıçta biraz alışmak zor gelebilir, ancak bir kere alıştığınızda bir daha `for` döngüsü yazmadan duramayacaksınız (her zaman değil tabii 😄).

Denemek en iyi öğrenme yoludur. Kendi küçük projelerinizde bu metotlarla oynayın. Sorularınız olursa yorumlarda bekliyorum. Bir sonraki yazıda görüşmek üzere, kodlamaya devam! 💻
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri