Dictionary-like object with a handler for missing keys
npm install defaultdict2defaultdict2
============
Returns a new dictionary-like object
Behaves __exactly__ like Python's defaultdict.
```
npm install --save defaultdict2
defaultdict(default_factory, initial_dict)
default_factory: value or function to be used for missing keysinitial_dict: (optional) dictionary to start with
See this live demo to check whether
your browser implements Proxies (Edge, FF, Chrome).
Getting started
---------------
The first argument is the value for missing keys - it can be a value or function like in Python.
``
var defaultdict = require('defaultdict2');
var d = defaultdict(0);
d.a++;
d.b++;
console.log(d);
// { a: 1, b: 1 }
The same example using a function:
``
var d = defaultdict(()=>0);
d.a++;
d.b++;
console.log(d);
// { a: 1, b: 1 }
The function will be called with two arguments target_dict,name.
Initial dictionary
-----------------
You can add an initial dictionary as second argument.
``
var d = defaultdict(0, {a: 1});
d.b++;
console.log(d);
// { a: 1, b: 1 }
Nested dictionaries
-------------------
There is no limit to your creativity!
``
var d = defaultdict(()=>defaultdict(0));
d.a.b++;
console.log(d);
// { a: { b: 1 } }
Using in a browser
------------------
Unfortunately ES6 proxies aren't fully adopted in browsers,
so this might not work in every browser.
However Edge, FF and Chrome (>49) support it.
``
If you use webpack or browserify, please require the browser-part of defaultdict:
``
var defaultdict = require('defaultdict/browser');
``
bower install --save defaultdict2
And then the script to your page
``
Gotchas
-------
1) Javascript doesn't allow string keys on dictionaries -> h[20] will create the key '20'
``
var p = defaultdict(0, {1: 1});
console.log(1 in p);
// false
console.log('1' in p);
// true
2) Be careful when checking for existence. Either use in or set the d.default_factory to undefined
```
var p = defaultdict(0, {a: 1});
console.log('b' in p);
// false
p.default_factory = undefined;
console.log(p.b);
// undefined
Requirements
------------
This depends on ES6 proxies. They should be part of your node version.
License
-------
The MIT License