objelerden Map’lere

Dil yapı nesnesini stringlerden rasgele değerlere (bir veri yapısı) map olarak kullanmak JavaScript’te her zaman geçici bir çözüm olmuştur. Bunu yapmanın en güvenli yolu, prototipi null olan bir nesne oluşturmaktır. O zaman hala hiçbir anahtarın __proto__ string’i olmadığından emin olmalısınız, çünkü bu özellik anahtarı birçok JavaScript motorunda özel fonksiyonlar tetikler.

Aşağıdaki ES5 kodu, dict nesnesini bir map olarak kullanan countWords fonksiyonunu içerir:

var dict = Object.create(null);
function countWords(word) {
    var escapedWord = escapeKey(word);
    if (escapedWord in dict) {
        dict[escapedWord]++;
    } else {
        dict[escapedWord] = 1;
    }
}
function escapeKey(key) {
    if (key.indexOf('__proto__') === 0) {
        return key+'%';
    } else {
        return key;
    }
}

ES6’da, yerleşik veri yapısı Map kullanabilir ve anahtarlardan kaçmanız gerekmez. Olumsuz bir yanı ise, Map içindeki değerleri artırmak için daha az uygundur.

const map = new Map();
function countWords(word) {
    const count = map.get(word) || 0;
    map.set(word, count + 1);
}

Mapin bir başka yararı da, yalnızca string değil, isteğe bağlı değerleri anahtar olarak kullanabilmenizdir.

Sıradaki Konu: Yeni string fonksiyonları