Map : Object Maps allow associating keys and values similar to normal %%/Object|Objects%% except Maps allow any Object to be used as a key instead of just %%/String|Strings%% and %%/Symbol|Symbols%%. Maps use %%#get|get()%% and %%#set|set()%% methods to access the values stored in the Map. A Map are often called a HashTable or a Dictionary in other languages. Iterable: true Version: ECMAScript 2015 Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map-objects ---- new Map() : Map Creates an empty Map. var objectKey = { foo: 'bar' }; var x = new Map(); x.set(1, 'keys are not converted to strings'); x.set('1', 'this is stored separately than the previous value'); x.set(objectKey, ['you use arbitrary objects as keys and values']); console.log(x.get(1)); console.log(x.get('1')); console.log(x.get(objectKey)); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map-iterable ---- new Map(iterable : Object) : Map Creates a Map by iterating over **iterable** and using the first element of the iterator value as the key and second element as the value. var objectKey = { foo: 'bar' }; var fromArray = new Map([[0, 'array0'], [objectKey, 'array1']]); console.log(fromArray.get(0)); console.log(fromArray.get(objectKey)); console.log(); var generator = function*() { yield [0, 'generator0']; yield [objectKey, 'generator1']; }; var fromGenerator = new Map(generator()); console.log(fromGenerator.get(0)); console.log(fromGenerator.get(objectKey)); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map-iterable ---- instance.size : Number The number of key/value pairs in **this**. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); console.log(x.size); x.set('d', 'value D'); console.log(x.size); x.clear(); console.log(x.size); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-get-map.prototype.size ---- prototype.clear() : undefined Clears the key/value pairs from **this**. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); console.log(x.size); x.clear(); console.log(x.size); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.clear ---- prototype.delete(key : Object) : Boolean Removes **key** and its corresponding value from **this**. Returns **true** if **key** was in **this** before deleting it. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); console.log('size before delete: ' + x.size); console.log('deleted "a" = ' + x.delete('a')); console.log('size after delete: ' + x.size); console.log('value for "a" = ' + x.get('a')); console.log('deleted "foo" = ' + x.delete('foo')); console.log('size after delete: ' + x.size); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.delete ---- prototype.entries() : Iterator Returns an iterator of the index and items in **this** where the %%Iterator#next|**values**s%% of the iterator are of the form **[key : %%/Object|Object%%, value : %%/Object|Object%%]**. The **entries** function is also returned for **this[%%/Symbol#iterator|Symbol.iterator%%]** so you can iterate over **this** directly to get the entries. See also %%#keys|**keys()**%% and %%#values|**values()**%%. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); // entries is returned by x[Symbol.iterator] so you can just // use x directly in the for (... of ...) loop for (var value of x) { console.dir(value); } // You can iterate over entries explicitly for (var entry of x.entries()) { console.dir(entry); } // Or access the iterator manually var entries = x.entries(); console.dir(entries.next()); console.dir(entries.next()); console.dir(entries.next()); console.dir(entries.next()); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.entries ---- prototype.forEach(callback(value : Object, key : Object, map : Map) : undefined, [thisArg : Object]) : undefined Calls **callback** for each key/value pair in **this**. The **Map** passed to **callback** is the **this** of the call to **forEach**. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); x.forEach(function(value, key, map) { console.log('key: "' + key + '", value: "' + value + '"'); }); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.forEach ---- prototype.get(key : Object) : Object Returns the value stored for **key**. If no value is stored, returns %%/undefined|**undefined**%%. See also %%#has|**has()**%% and %%#set|**set()**%%. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); console.log(x.get('a')); console.log(x.get('b')); // Notice the values stored in the map are not properties on // the object. get() is the only way to retrieve the values. console.log(x['b']); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.get ---- prototype.has(key : Object) : Boolean Returns **true** if the map has a value stored for **key**. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); console.log(x.has('a')); console.log(x.has('foo')); // has() lets you check if a value is stored, even if // the value is undefined x.set('e', undefined); console.log(x.has('e') + ' ' + x.get('e')); console.log(x.has('f') + ' ' + x.get('f')); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.has ---- prototype.keys() : Iterator Returns an iterator of the keys in **this**. See also %%#entries|**entries()**%% and %%#values|**values()**%%. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); // Use for (... of ...) to loop over the iterator for (var key of x.keys()) { console.dir(key); } // Or access the iterator manually var keys = x.keys(); console.dir(keys.next()); console.dir(keys.next()); console.dir(keys.next()); console.dir(keys.next()); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.keys ---- prototype.set(key : Object, value : Object) : Map Stores **value** in **this** at the specified **key**. If a value is already stored for that **key**, it is replaced with **value**. Returns **this**. See also %%#get|**get()**%% and %%#has|**has()**%%. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); console.log(x.get('a')); x.set('a', 'a different value'); console.log(x.get('a')); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.set ---- prototype.values() : Iterator Returns an iterator of the values in **this**. See also %%#entries|**entries()**%% and %%#keys|**keys()**%%. var x = new Map([['a', 'value A'], ['b', 'value B'], ['c', 'value C']]); // Use for (... of ...) to loop over the iterator for (var value of x.values()) { console.dir(value); } // Or access the iterator manually var values = x.values(); console.dir(values.next()); console.dir(values.next()); console.dir(values.next()); console.dir(values.next()); Spec: http://www.ecma-international.org/ecma-262/6.0/#sec-map.prototype.values