Map, anahtar-değer eşlemesi üzerine bir veri yapısıdır. Set ise matematikteki kümeleme kuralları üzerine bir veri yapısıdır. Bu bölüm map ve get üzerindeki işlemlere ayrılmıştır.
Map
Map, set, get, has, delete olmak üzere 4 temel işleme sahiptir. Anahtar veya değer kısmı herhangi bir veri yapısından olabilir. Eğer aynı anahtar üzerine ikinci bir set işlemi yapılırsa anahtardaki değer üzerine güncelleme işlemi yapar. Eğer anahtar değer map listesinde yok ise ekleme işlemi yapar. get anahtar üzerinden değeri almak için kullanılır. Eğer get değeri map listesinde yok ise “undefined” değeri döndürülür. delete anahtar üzerinden silme işlemi yapar. Bir for-of döngüsü ile map listesini dolaşmak mümkündür. Örneğin,
1 2 3 4 5 6 7 8 9 10 11 12 |
let m = new Map() m.set("merhaba", 42) m.set("map", 34) m.set("sil", 24) m.set("map", 14) m.set(124, "deneme") console.log(m.get("merhaba")) console.log(m.get("map")) console.log(m.get("yok")) m.delete("sil") for (let [ anahtar, deger ] of m.entries()) console.log(anahtar + " = " + deger) |
1 2 3 4 5 6 |
42 14 undefined merhaba = 42 map = 14 124 = deneme |
Anahtar veya değerleri bir diziye atmak için:
1 2 3 4 5 |
//array'a dönüştürme const a1 = [...m.keys()] console.log(a1) const a2 = [...m.values()] console.log(a2) |
1 2 |
[ 'merhaba', 'map', 124 ] [ 42, 14, 'deneme' ] |
Set
Set, tek değer alır ve değer tekrarlaması yapmaz. Map’te olduğu gibi set, get, has, delete üzerinden Set yönetilir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
let s = new Set() s.add("merhaba").add("set").add("merhaba") //zincirleme s.add("set") console.log(s.size) console.log(s.has("merhaba")) console.log(s.has("bu değer yok!")) for (let key of s.values()) // insertion order console.log(key) //array'a dönüştürme const a3 = [...s.keys()] console.log(a3) const a4 = [...s.values()] console.log(a4) |
1 2 3 4 5 6 7 |
2 true false merhaba set [ 'merhaba', 'set' ] [ 'merhaba', 'set' ] |
Örneğin ikinci satırındaki gibi zincirleme özelliği ile bir kümeye birden fazla eleman eklenebilir. Örnekte görüldüğü gibi birçok özelliği Map veri yapısına çok benzerdir.
Küme deyince aklımıza matematikteki birleşim, kesişim, fark gibi konular gelir. Bu özellikleri de ES6’da çok kısa kodlarla yapabilirsiniz. Örneğin,
1 2 3 4 5 6 7 8 |
let kume1 = new Set([1,2,3]); let kume2 = new Set([4,3,2]); let birlesim = new Set([...kume1, ...kume2]); let kesisim = new Set([...kume1].filter(x => kume2.has(x))); let fark = new Set([...kume1].filter(x => !kume2.has(x))); console.log(birlesim) console.log(kesisim) console.log(fark) |
1 2 3 |
Set { 1, 2, 3, 4 } Set { 2, 3 } Set { 1 } |
fark işleminde kume1/kume2 yapıldı, ancak farkın yönünü belirlemek size kalmış. ES5’te çok uzun satırlar ile yapılan bu işlemler, ES6’da çok daha fonksiyonel bir yapıya sahiptir.