61 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# pseudomap
 | 
						|
 | 
						|
A thing that is a lot like ES6 `Map`, but without iterators, for use
 | 
						|
in environments where `for..of` syntax and `Map` are not available.
 | 
						|
 | 
						|
If you need iterators, or just in general a more faithful polyfill to
 | 
						|
ES6 Maps, check out [es6-map](http://npm.im/es6-map).
 | 
						|
 | 
						|
If you are in an environment where `Map` is supported, then that will
 | 
						|
be returned instead, unless `process.env.TEST_PSEUDOMAP` is set.
 | 
						|
 | 
						|
You can use any value as keys, and any value as data.  Setting again
 | 
						|
with the identical key will overwrite the previous value.
 | 
						|
 | 
						|
Internally, data is stored on an `Object.create(null)` style object.
 | 
						|
The key is coerced to a string to generate the key on the internal
 | 
						|
data-bag object.  The original key used is stored along with the data.
 | 
						|
 | 
						|
In the event of a stringified-key collision, a new key is generated by
 | 
						|
appending an increasing number to the stringified-key until finding
 | 
						|
either the intended key or an empty spot.
 | 
						|
 | 
						|
Note that because object traversal order of plain objects is not
 | 
						|
guaranteed to be identical to insertion order, the insertion order
 | 
						|
guarantee of `Map.prototype.forEach` is not guaranteed in this
 | 
						|
implementation.  However, in all versions of Node.js and V8 where this
 | 
						|
module works, `forEach` does traverse data in insertion order.
 | 
						|
 | 
						|
## API
 | 
						|
 | 
						|
Most of the [Map
 | 
						|
API](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map),
 | 
						|
with the following exceptions:
 | 
						|
 | 
						|
1. A `Map` object is not an iterator.
 | 
						|
2. `values`, `keys`, and `entries` methods are not implemented,
 | 
						|
   because they return iterators.
 | 
						|
3. The argument to the constructor can be an Array of `[key, value]`
 | 
						|
   pairs, or a `Map` or `PseudoMap` object.  But, since iterators
 | 
						|
   aren't used, passing any plain-old iterator won't initialize the
 | 
						|
   map properly.
 | 
						|
 | 
						|
## USAGE
 | 
						|
 | 
						|
Use just like a regular ES6 Map.
 | 
						|
 | 
						|
```javascript
 | 
						|
var PseudoMap = require('pseudomap')
 | 
						|
 | 
						|
// optionally provide a pseudomap, or an array of [key,value] pairs
 | 
						|
// as the argument to initialize the map with
 | 
						|
var myMap = new PseudoMap()
 | 
						|
 | 
						|
myMap.set(1, 'number 1')
 | 
						|
myMap.set('1', 'string 1')
 | 
						|
var akey = {}
 | 
						|
var bkey = {}
 | 
						|
myMap.set(akey, { some: 'data' })
 | 
						|
myMap.set(bkey, { some: 'other data' })
 | 
						|
```
 |