2012-10-25 11 views
14

Olası Çoğalt:
Set undefined javascript property before readVarsayılan değerlere sahip Javascript dizisi (Python'un varsayılan deyimiyle eşdeğeri)?

JavaScript Python's defaultdict eşdeğer var mı? Bu, eksik anahtar için döndürülen değerin tanımlanabileceği bir Javascript dizisi olacaktır. Şunlar gibi:

var a = defaultArray("0"); 
console.log(a['dog']); 
// would print 0 

Değilse nasıl uygularsınız?

+0

http://stackoverflow.com/questions/812961/javascript-getters-and-setters-for-dummies – goat

+0

Bergi ve rambo, teşekkürler, ama ben de sanmıyorum Bunların aradığı şeyi yapmak. A.get ('köpek') uygulamak için arıyorum - Bazı varsayılan değer dönmek için ['köpek'] arıyorum. Bu şekilde diziyi kullanan kod, onu düzenli bir dizi olarak ele alabilir. – Parand

cevap

3

Hayır, bu, JavaScript'te mümkün değildir. Btw, kesinlikle diziler yerine Nesneleri (özellik-değer haritaları) kastetmişsinizdir. İki çözümleri:

  • tam olarak istediğiniz şeyi yapmak için tasarlanmış bir Proxy olarak nesneyi uygulamak. Yine de, sadece bir taslak ve şu anda sadece supported in Firefox' Javascript 1.8.5.

  • Nesne özellikleri yerine string parametresiyle bir getter işlevi kullanın. Bu işlev, giriş anahtarını dahili bir "sözlük" nesnesinde arayabilir ve yanlışları program aracılığıyla ele alabilir - örn. dinamik olarak değerler oluşturmak veya varsayılan değerleri döndürmek.

    Elbette bu tür alıcı işlevleri için bir fabrika kurabilirsiniz.

function defaultDict(map, default) { 
    return function(key) { 
     if (key in map) 
      return map[key]; 
     if (typeof default == "function") 
      return default(key); 
     return default; 
    }; 
} 

var a = defaultDict({cat: 1}, 0); 
console.log(a('cat')); // 1 
console.log(a('dog')); // 0 
+0

Teşekkürler Bergi. Bu çok kötü, gerçekten bir eşdeğer olduğunu umuyorum. – Parand

+0

Yeni değerler eklemek için koddaki bazı uzantılarla, collections.defaultdict py işlevinin aynı işlevi olacaktır. – Luchux

+1

Ne demek @Luchux [pycollections.js] 'de bahseder (http://github.com/seriesoftubes/pycollections.js). –

İlgili konular