JavaScript programlama dilinde verilerle çalışırken sıkça tekrarlayan işlemler yapmamız gerekebilir. Bu gibi durumlarda döngüler kullanılır. Diziler üzerinde döngü kurmak oldukça yaygındır; çünkü diziler “tekrarlanabilir” (iterable) yapılardır. Ancak bazen elimizde dizi değil de bir nesne (object) olur. İşte bu noktada, nesneler üzerinde nasıl döngü kurulacağı sorusu karşımıza çıkar. Bu yazıda sadece nesneler üzerinde döngü kurma konusunu ele alacağız ve for...in
, Object
metodları ve for...of
döngüsünün sınırlarını inceleyeceğiz.
Nesneler ve for...of
Döngüsü Uyumsuzluğu
JavaScript’te for...of
döngüsü diziler, string’ler, Map ve Set gibi iterable yapılar üzerinde çalışır. Ancak { ad: "Zeynep", not: 95 }
gibi bir nesne üzerinde for...of
kullanırsanız şu hatayı alırsınız:
Uncaught TypeError: object is not iterable
Çünkü JavaScript nesneleri iterable olarak kabul etmez. Yani for...of
doğrudan bir nesneyle çalışamaz. Peki, bu durumda ne yapacağız?
Nesne Üzerinde for...in
Kullanımı
Eğer bir nesnedeki tüm anahtarları (key) sırayla dolaşmak istiyorsak for...in
döngüsü yardımımıza yetişir. Bu döngü, nesnenin her özelliğini (property) tek tek verir.
Örnek:
const kitaplar = {
"Harry Potter": 120,
"Yüzüklerin Efendisi": 200,
"Sefiller": 180
};
for (let kitap in kitaplar) {
console.log(kitap); // kitap isimlerini yazdırır
}
Bu kod her bir anahtar üzerinde döner. Eğer kitap isimlerinin yanındaki sayfa sayılarını da göstermek istiyorsak:
for (let kitap in kitaplar) {
console.log(`${kitap} kitabı ${kitaplar[kitap]} sayfa.`);
}
Burada kitaplar[kitap]
ifadesi, anahtara karşılık gelen değeri verir. Yani "Harry Potter"
anahtarı için kitaplar["Harry Potter"]
sonucu 120 olacaktır.
Object.keys
, Object.values
, Object.entries
Kullanımı
Modern JavaScript’te nesnelerle çalışırken Object
sınıfına ait üç önemli yardımcı metot işimizi oldukça kolaylaştırır:
1. Object.keys(obj)
Bu metod, bize nesnedeki tüm anahtarları bir dizi olarak verir.
const arabalar = {
BMW: 3,
Mercedes: 5,
Toyota: 7
};
const markalar = Object.keys(arabalar);
console.log(markalar); // ["BMW", "Mercedes", "Toyota"]
2. Object.values(obj)
Bu metod, sadece değerleri bir diziye çevirir.
const degerler = Object.values(arabalar);
console.log(degerler); // [3, 5, 7]
3. Object.entries(obj)
Bu metod, her bir elemanı [anahtar, değer]
şeklinde içeren iç içe dizilerden oluşan bir dizi döner.
const girdiler = Object.entries(arabalar);
console.log(girdiler);
// [["BMW", 3], ["Mercedes", 5], ["Toyota", 7]]
Object.values
ile for...of
Kullanarak Ortalama Hesaplamak
Object.values
sayesinde değerleri diziye dönüştürebiliriz. Bu da for...of
ile işlem yapmamıza olanak tanır.
Örnek: Arabaların sayılarının ortalamasını alalım.
const arabalar = {
BMW: 3,
Mercedes: 5,
Toyota: 7
};
const sayilar = Object.values(arabalar); // [3, 5, 7]
let toplam = 0;
for (let adet of sayilar) {
toplam += adet;
}
const ortalama = toplam / sayilar.length;
console.log("Ortalama araç sayısı:", ortalama);
Burada yaptığımız işlemler:
Object.values
ile değerleri aldık.
for...of
döngüsüyle tüm sayıları topladık.
- Toplamı, dizi uzunluğuna bölerek ortalamayı bulduk.
Özet
Kullanım Yöntemi | Ne Yapar? | Nerede Kullanılır? |
for...of | Sadece iterable yapılar üzerinde döner | Dizi, string, Map, Set |
for...in | Nesnelerdeki anahtarları (key) sırayla verir | Object literal yapılar |
Object.keys(obj) | Nesnedeki tüm key’leri bir diziye çevirir | Key listesi gerektiğinde |
Object.values(obj) | Nesnedeki tüm değerleri bir diziye çevirir | Değerlerle işlem yapılacaksa |
Object.entries(obj) | [key, value] çiftlerinden oluşan bir dizi döner | Anahtar ve değer birlikte kullanıldığında |
Sonuç
JavaScript’te nesneler iterable değildir, bu yüzden doğrudan for...of
ile kullanılamazlar. Ancak for...in
veya Object.keys
, Object.values
, Object.entries
gibi yöntemlerle nesneler üzerinde gezinebiliriz. Bu yollarla ister sadece anahtarlarla, ister sadece değerlerle, ister her ikisiyle birlikte işlem yapabiliriz. Özellikle veri analizi, ortalama hesaplama veya veri listesi oluşturma gibi işlemlerde bu bilgiler oldukça işe yarar.
Bu temel yöntemleri öğrendiğinizde, JavaScript nesneleriyle daha güçlü ve esnek kodlar yazabilirsiniz.