1 | # Multimap - Map which Allow Multiple Values for the same Key
|
2 |
|
3 | ## Install
|
4 |
|
5 | ```bash
|
6 | npm install multimap --save
|
7 | ```
|
8 |
|
9 | ## Usage
|
10 |
|
11 |
|
12 | If you'd like to use native version when it exists and fallback to polyfill if it doesn't, but without implementing `Map` on global scope, do:
|
13 |
|
14 | ```javascript
|
15 | var Multimap = require('multimap');
|
16 | var m = new Multimap();
|
17 | ```
|
18 |
|
19 | If the global es6 `Map` exists or `Multimap.Map` is set, `Multimap` will use the `Map` as inner store, that means Object can be used as key.
|
20 |
|
21 | ```javascript
|
22 | var Multimap = require('multimap');
|
23 |
|
24 | // if harmony is on
|
25 | /* nothing need to do */
|
26 | // or if you are using es6-shim
|
27 | Multimap.Map = ShimMap;
|
28 |
|
29 | var m = new Multimap();
|
30 | var key = {};
|
31 | m.set(key, 'one');
|
32 |
|
33 | ```
|
34 |
|
35 | Otherwise, an object will be used, all the keys will be transformed into string.
|
36 |
|
37 |
|
38 | ### Browser
|
39 |
|
40 | Just download the `index.js` as `Multimap.js`.
|
41 |
|
42 | ```
|
43 | <script src=Multimap.js"></script>
|
44 | <script>
|
45 | var map = new Multimap([['a', 1], ['b', 2], ['c', 3]]);
|
46 | map = map.set('b', 20);
|
47 | map.get('b'); // [2, 20]
|
48 | </script>
|
49 | ```
|
50 |
|
51 | Or use as an AMD loader:
|
52 |
|
53 | ```
|
54 | require(['./Multimap.js'], function (Multimap) {
|
55 | var map = new Multimap([['a', 1], ['b', 2], ['c', 3]]);
|
56 | map = map.set('b', 20);
|
57 | map.get('b'); // [2, 20]
|
58 | });
|
59 | ```
|
60 |
|
61 |
|
62 | ## API
|
63 |
|
64 | Following shows how to use `Multimap`:
|
65 |
|
66 | ```javascript
|
67 | var Multimap = require('multimap');
|
68 |
|
69 | var map = new Multimap([['a', 'one'], ['b', 1], ['a', 'two'], ['b', 2]]);
|
70 |
|
71 | map.size; // 4
|
72 |
|
73 | map.get('a'); // ['one', 'two']
|
74 | map.get('b'); // [1, 2]
|
75 |
|
76 | map.has('a'); // true
|
77 | map.has('foo'); // false
|
78 |
|
79 | map.has('a', 'one'); // true
|
80 | map.has('b', 3); // false
|
81 |
|
82 | map.set('a', 'three');
|
83 | map.size; // 5
|
84 | map.get('a'); // ['one', 'two', 'three']
|
85 |
|
86 | map.set('b', 3, 4);
|
87 | map.size; // 7
|
88 |
|
89 | map.delete('a', 'three'); // true
|
90 | map.delete('x'); // false
|
91 | map.delete('a', 'four'); // false
|
92 | map.delete('b'); // true
|
93 |
|
94 | map.size; // 2
|
95 |
|
96 | map.set('b', 1, 2);
|
97 | map.size; // 4
|
98 |
|
99 |
|
100 | map.forEach(function (value, key) {
|
101 | // iterates { 'a', 'one' }, { 'a', 'two' }, { 'b', 1 }, { 'b', 2 }
|
102 | });
|
103 |
|
104 | map.forEachEntry(function (entry, key) {
|
105 | // iterates { 'a', ['one', 'two'] }, { 'b', [1, 2] }
|
106 | });
|
107 |
|
108 |
|
109 | var keys = map.keys(); // iterator with ['a', 'b']
|
110 | keys.next().value; // 'a'
|
111 | var values = map.values(); // iterator ['one', 'two', 1, 2]
|
112 |
|
113 | map.clear(); // undefined
|
114 | map.size; // 0
|
115 | ```
|
116 |
|
117 |
|
118 | ## License
|
119 |
|
120 | (The MIT License)
|
121 |
|
122 | Copyright (c) 2013, Villa.Gao <jky239@gmail.com>;
|
123 | All rights reserved.
|