2013-10-01 120 views
4

在python中,你可以有一個defaultdict(int),它將int存儲爲值。如果您嘗試對字典中不存在的某個鍵進行「獲取」,則您將得到零作爲默認值。在JavaScript中相當於Defaultdict

你可以做同樣的JavaScript/jQuery的

+0

可能重複(http://stackoverflow.com/questions/11503666/set-undefined-javascript-property-before-read) – SheetJS

回答

1

我不認爲有等價,但你總是可以自己編寫。在javascript字典相當於將一個對象,所以你可以把它寫像這樣

function defaultDict() { 
    this.get = function (key) { 
     if (this.hasOwnProperty(key)) { 
      return key; 
     } else { 
      return 0; 
     } 
    } 
} 

然後調用它像這樣

var myDict = new defaultDict(); 
myDict[1] = 2; 
myDict.get(1); 
+0

這不會工作,如果你想要將默認值設爲集合(例如,列表圖)。 –

5

退房pycollections.js

var collections = require('pycollections'); 

var dd = new collections.DefaultDict(function(){return 0}); 
console.log(dd.get('missing')); // 0 

dd.setOneNewValue(987, function(currentValue) { 
    return currentValue + 1; 
}); 

console.log(dd.items()); // [[987, 1], ['missing', 0]] 
1

你可以使用JavaScript構建一個Proxy

var defaultDict = new Proxy({}, { 
    get: (target, name) => name in target ? target[name] : 0 
}) 

這使您可以在訪問屬性時使用與普通對象相同的語法。

defaultDict.a = 1 
console.log(defaultDict.a) // 1 
console.log(defaultDict.b) // 0 

要清理它,你可以將它包裝在構造函數中,或者使用類語法。

​​ 的[設置未定義讀之前JavaScript屬性]