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
sizeproperty'si var- İterable —
for...ofile 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 çevirWeakMap
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:
sizeyok- İterable değil
keys(),values(),forEachyok
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 anahtar | Map |
| Tekrarsız değerler | Set |
| Obje'ye metadata bağla, GC olsun | WeakMap |
| Bir obje kümesini takip et | WeakSet |
| Basit konfig | Object |
| Sıralı liste | Array |