2012-10-25 57 views
14

可能重複:
Set undefined javascript property before readJavaScript數組與默認值(相當於Python的defaultdict)?

是否存在的Python's defaultdict在Javascript等效?這將是一個Javascript數組,其中返回缺少的鍵的值是可定義的。例如:

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

如果不是,您將如何實現它?

+0

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

+0

BERGI和蘭博,謝謝你,但我不認爲任何那些做我正在尋找的東西。我不想執行a.get('dog') - 我正在尋找['dog']來返回一些默認值。這樣使用該數組的代碼可以將其視爲常規數組。 – Parand

回答

3

不,這在JavaScript中不可行。順便說一句,你的意思是對象(property-value-maps)而不是數組。有兩種解決方案:

  • 實現對象爲Proxy,其目的是做的正是你想要的。然而,這只是一個草案,目前只有supported in Firefox' Javascript 1.8.5

  • 使用帶字符串參數而不是對象屬性的getter函數。該功能可以在內部「詞典」對象中查找輸入鍵,並通過編程處理未命中 - 例如,動態創建值或返回默認值。

    當然,你可以爲這種吸氣功能建立一個工廠。

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

謝謝Bergi。這太糟糕了,我真的希望有一個相同的。 – Parand

+0

由於代碼中有一些擴展來添加新值,因此您將擁有與collections.defaultdict py相同的功能。 – Luchux

+1

我做了@Luchux在[pycollections.js]中討論的內容(http://github.com/seriesoftubes/pycollections.js)。 –