JavaScript: Başlangıçtan İleri Seviyeye
Bölüm 25 / 312 dk okuma

Map, Set, WeakMap, WeakSet

Object'ten daha güçlü modern koleksiyon yapıları.

ES6 ile gelen 4 yeni koleksiyon. Object ve Array'in eksik kaldığı yerlerde.

Map

Anahtar-değer koleksiyonu. Object'ten farkları:

  • Anahtar her tip olabilir (obje, fonksiyon, primitive)
  • Sıralı — eklenme sırasını korur
  • size property'si var
  • İterable — for...of ile gezilir
const m = new Map();
 
m.set("name", "Furkan");
m.set(42, "sayı anahtar");
m.set({ id: 1 }, "obje anahtar");
 
m.get("name");       // "Furkan"
m.has("name");       // true
m.size;              // 3
m.delete("name");
m.clear();

Constructor'a init

const m = new Map([
  ["a", 1],
  ["b", 2],
]);

Gezme

for (const [key, value] of m) { ... }
m.forEach((value, key) => { ... });
 
[...m.keys()];
[...m.values()];
[...m.entries()];

Object → Map ve geri

const obj = { a: 1, b: 2 };
const map = new Map(Object.entries(obj));
 
const back = Object.fromEntries(map);

Map mı Object mi?

Map kullan:

  • Anahtarlar runtime'da bilinmiyor / dinamik
  • Anahtar tipi string/symbol değil (sayı, obje)
  • Sık ekleme/silme yapılacak
  • Sıraya ihtiyaç var

Object kullan:

  • Sabit, az sayıda alan
  • JSON ile uyumlu olmalı
  • Method'lar gerekiyor

Set

Tekrarsız değerler koleksiyonu.

const s = new Set();
s.add(1);
s.add(2);
s.add(2);  // yok sayılır
s.add(3);
 
s.has(2);   // true
s.size;     // 3
s.delete(1);

Diziden tekrarları çıkarma — klasik

const arr = [1, 2, 2, 3, 3, 4];
const unique = [...new Set(arr)];   // [1, 2, 3, 4]

Gezme

for (const v of s) { ... }
s.forEach((v) => { ... });
[...s];  // diziye çevir

WeakMap

Anahtarları sadece obje olabilen Map. Anahtar başka yerde referans edilmiyorsa çöp toplayıcı girip siler.

const cache = new WeakMap();
 
function process(obj) {
  if (cache.has(obj)) return cache.get(obj);
  const result = expensive(obj);
  cache.set(obj, result);
  return result;
}

obj artık kullanılmıyorsa cache'den de otomatik silinir → memory leak yok.

Sınırlamalar:

  • size yok
  • İterable değil
  • keys(), values(), forEach yok

WeakSet

Aynı mantık ama Set için. Bir objeyi "işaretleme" pattern'inde kullanılır:

const visited = new WeakSet();
 
function process(node) {
  if (visited.has(node)) return;
  visited.add(node);
  // ...
}

Hangisi ne zaman?

İhtiyaçYapı
Sayılabilir, sıralı, her tip anahtarMap
Tekrarsız değerlerSet
Obje'ye metadata bağla, GC olsunWeakMap
Bir obje kümesini takip etWeakSet
Basit konfigObject
Sıralı listeArray

Bu bölümü bitirdin mi?

İlerlemen tarayıcıda saklanır, eğitim listesinde görünür.

Paylaş