JavaScript geliştiricilerinin verileri anahtar-değer çiftleri olarak yönetmesi gerektiğinde, Map yapısı oldukça kullanışlıdır. Map, normal nesnelerden farklı olarak hem anahtarların hem de değerlerin herhangi bir veri tipinde olmasına izin verir ve anahtar sırasını korur. Bu yazıda, JavaScript Map yapısının nasıl kullanılacağını ve en yaygın Map metotlarını detaylı bir şekilde inceleyeceğiz.


Map Nedir?


JavaScript’teki Map yapısı, her biri bir anahtar ve bir değer içeren öğelerden oluşan bir koleksiyondur. Bu yapı, normal JavaScript nesnelerinden farklıdır çünkü Map’lerde hem anahtarlar hem de değerler herhangi bir türde olabilir. Aynı zamanda, Map yapısı ekleme sırasını korur, yani eklenen öğeler hangi sırada eklenmişse o sırayla erişilebilir.


Map Nasıl Oluşturulur?


Map oluşturmak için new Map() ifadesini kullanırız ve içine isteğe bağlı olarak bir dizi anahtar-değer çifti ekleyebiliriz. Aşağıdaki örnekte, basit bir Map oluşturuyoruz:

const myMap = new Map([['a', 1], ['b', 2], ['c', 3]]);


Bu örnek, ‘a’, ‘b’ ve ‘c’ anahtarlarıyla ilişkili sırasıyla 1, 2 ve 3 değerlerine sahip bir Map oluşturur.


Map Metotları


Map yapısı, JavaScript’te anahtar-değer çiftleriyle veri depolarken oldukça esnek ve güçlü bir araçtır. Normal nesnelerden farklı olarak, Map’ler anahtar olarak herhangi bir veri tipini (string, number, object, function) kabul eder ve anahtarların eklenme sırasını korur. Bu özellikler, karmaşık veri yapılarıyla çalışırken Map’i güçlü bir araç haline getirir. Peki, Map ile hangi işlemleri gerçekleştirebiliriz? JavaScript, Map üzerinde kullanabileceğiniz bir dizi faydalı metot sunar. Bu metotlar, anahtar-değer çiftleri üzerinde çeşitli işlemler yapmanızı ve veri yönetimini daha kolay hale getirmenizi sağlar.


1. set(): Yeni bir anahtar-değer çifti ekler veya mevcut bir anahtarın değerini günceller

myMap.set('d', 4);  // Map {'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4}


2. get(): Belirtilen anahtarın değerini döndürür.

myMap.get('a');  // 1


3. has(): Map içinde belirtilen anahtarın olup olmadığını kontrol eder.

myMap.has('b');  // true


4. delete(): Belirtilen anahtarı ve ilişkili değerini Map’ten siler.

myMap.delete('c');  // true, Map {'a' => 1, 'b' => 2, 'd' => 4}


5. size: Map’teki anahtar-değer çiftlerinin sayısını döndürür.

myMap.size;  // 3


6. clear(): Map’teki tüm anahtar-değer çiftlerini siler.

myMap.clear();  // Map {}


Map İteratörleri


Map yapısında anahtarlar, değerler ve anahtar-değer çiftleri üzerinde dolaşmak için iteratörler kullanabilirsiniz.


keys(): Tüm anahtarları döndürür.

myMap.keys();  // Map Iterator {'a', 'b', 'd'}


values(): Tüm değerleri döndürür.

myMap.values();  // Map Iterator {1, 2, 4}


entries(): Anahtar-değer çiftlerini döndürür.

myMap.entries();  // Map Iterator {['a', 1], ['b', 2], ['d', 4]}


Map Üzerinde forEach Kullanımı


forEach() metodu, her anahtar-değer çifti üzerinde işlem yapmak için kullanılır. İki argüman alır: değer ve anahtar.

myMap.forEach((value, key) => console.log(key, value)); // Çıktı: // 'a' 1 // 'b' 2 // 'd' 4


Nesneden Map Oluşturma


JavaScript nesnelerini Map yapısına dönüştürmek de mümkündür. Object.entries() metodunu kullanarak bir nesneyi anahtar-değer çiftlerine dönüştürüp Map yapısı içinde kullanabilirsiniz.

const obj = { a: 1, b: 2 }; const newMap = new Map(Object.entries(obj));  // Map {'a' => 1, 'b' => 2}


JavaScript’teki Map yapısı, esnek ve güçlü bir veri yapısıdır. Anahtar sırasını koruma, herhangi bir veri tipini anahtar olarak kullanabilme ve geniş metot yelpazesi sayesinde geliştiricilere büyük avantajlar sunar. Bu rehberde ele aldığımız metotları ve örnekleri kendi projelerinizde kullanarak, verilerinizi daha verimli bir şekilde yönetebilirsiniz. Son olarak bu anlatımlar üzerine örnek bir senaryo kullanarak örnek şeklinde ele alalım.


Bir e-ticaret uygulamasında ürünlerin stok durumunu takip ediyoruz. Her ürün bir SKU (Stok Tutma Birimi) numarası ile tanımlanıyor ve stokta kalan miktarını tutuyoruz. Map yapısını kullanarak, ürünlerin stoklarını yönetebiliriz. Aşağıdaki örnekte, stok güncellemeleri ve kontrol işlemleri için Map kullanılıyor.


Stok Yönetimi Senaryosu:

// Stok verileri: SKU => Stok Miktarı const productStock = new Map([   ['SKU001', 15],   ['SKU002', 7],   ['SKU003', 0], ]); // Yeni bir ürün ekleme productStock.set('SKU004', 20); // Belirli bir SKU'nun stok durumunu kontrol etme function checkStock(sku) {   if (!productStock.has(sku)) {     return `Ürün (${sku}) bulunamadı.`;   }      const stock = productStock.get(sku);      return stock > 0      ? `Ürün (${sku}) stokta var, miktar: ${stock}`     : `Ürün (${sku}) stokta yok.`; } // Stok güncelleme işlemi function updateStock(sku, quantity) {   if (productStock.has(sku)) {     productStock.set(sku, productStock.get(sku) + quantity);     console.log(`${sku} stok güncellendi. Yeni miktar: ${productStock.get(sku)}`);   } else {     console.log(`${sku} ürün bulunamadı.`);   } } // Ürün stoklarını listeleme function listAllStocks() {   productStock.forEach((quantity, sku) => {     console.log(`SKU: ${sku}, Stok: ${quantity}`);   }); } // Örnek kullanım console.log(checkStock('SKU001'));  // Ürün mevcut mu kontrol et updateStock('SKU002', 10);  // SKU002 ürününün stok miktarını güncelle listAllStocks();  // Tüm ürünlerin stok durumunu listele

Bu Örnekte Neler Yaptık?

productStock adında bir Map oluşturduk ve her SKU’nun stok miktarını depoladık.

checkStock() fonksiyonu, belirli bir SKU’nun stokta olup olmadığını kontrol eder.

updateStock() fonksiyonu ise belirtilen SKU’nun stok miktarını günceller.

• Son olarak, listAllStocks() fonksiyonu tüm ürünlerin stok durumunu listeler.

Bu örnek, Map’in gerçek dünyada stok yönetimi gibi senaryolarda nasıl verimli bir şekilde kullanılabileceğini gösteriyor. Map, özellikle SKU gibi benzersiz anahtarlarla çalışan sistemlerde veri yönetimini daha kolay ve etkili hale getirir. Map yapısını daha detaylı incelemek ve ileri düzey kullanım senaryolarını keşfetmek için ilerleyen yazılarda bu konuyu daha derinlemesine ele almayı planlıyorum. Şimdilik görüşmek üzere!