Learnitweb

Map in JavaScript

1. Introduction

Map is a collection of key value pairs. Map allows both primitive and objects as key or value. Map at first looks like an object which also holds key value pairs, but it is different than object. We’ll discuss the differences of map with object later.

A map looks like the following:

{ 'a' => 1, 'b' => 2, 'c' => 3 }

Key equality in Map is based on the sameValueZero algorithm (two values are functionally identical and +0 and -0 are considered equal).

2. Create a Map

A Map object can be created using Map() constructor.

const map = new Map();

3. Put keys in Map

The Map provides method set(key, value) to set key in a Map object. If the key already exists, the key will be overwritten. This method returns the Map object.

const map = new Map();
map.set("msg", "hello world");
console.log(map); // Map(1) { 'msg' => 'hello world' }

4. Remove all key-value pairs from Map

The Map provides clear() method which removes all key-value pairs from the Map object.

const map = new Map();

map.set("one", 1);
map.set("two", 2);
console.log(map); //Map(2) { 'one' => 1, 'two' => 2 }

map.clear();
console.log(map); // Map(0) {}

5. Delete a key

Using the delete() method, you can delete a key. This method returns true if an element in the Map object existed and has been removed, or false if the element does not exist.

const map = new Map();

map.set("one", 1);
map.set("two", 2);

console.log(map); //Map(2) { 'one' => 1, 'two' => 2 }

//delete key "one"
map.delete("one");
console.log(map); // Map(1) { 'two' => 2 }

6. Get value associated with a key

The get() method is used to get the value associated with a key. If the key doesn’t exist returns undefined.

const map = new Map();

map.set("one", 1);
map.set("two", 2);

console.log(map); //Map(2) { 'one' => 1, 'two' => 2 }

//get value associated with key "one"
console.log(map.get("one")); // 1

7. Check if the key exists

The method has(key) returns true if the key exists otherwise false.

const map = new Map();

map.set("one", 1);
map.set("two", undefined);

console.log(map); //Map(2) { 'one' => 1, 'two' => 2 }

console.log(map.has("one")); // true
console.log(map.has("three")); // false

8. Number of key-value pairs in Map

The size instance property provides the number of key-value pairs in the Map.

const map = new Map();

map.set("one", 1);
map.set("two", 2);

console.log(map.size); // 2

9. No default keys in Map

A Map doesn’t contain keys by default. It contains keys which are explicitly put into it.

const map = new Map();
console.log(map); // Map(0) {}

10. Key Types

A Map can contain functions, objects and primitives as keys.

const map = new Map();
let obj = { prop1: "my message" };
let func = function () {
  return "hello world";
};

//function as key
map.set(func, 1);

//primitive as key
map.set(2, "two");

//object as key
map.set("myObj", obj);

console.log(map);

11. Key order

The keys in a Map are ordered in straight order in which they were inserted in the Map.

const map = new Map();
map.set("one", 1);
map.set("two", 2);
map.set("three", 3);

for (const key of map.keys()) {
  console.log(key);
}
//Output
//one
//two
//three

12. Set properties in Map

A Map is an object. You can set properties in a Map just like any other object. But adding a property in Map does not add it as a key in a Map as it interacts with the generic object.

const map = new Map();
map.set("one", 1);
map.set("two", 2);
map.set("three", 3);

map["myProp"] = "myValue";

console.log(map); // Map(3) { 'one' => 1, 'two' => 2, 'three' => 3, myProp: 'myValue' }

13. NaN as Map keys

NaN can also be used as a key in a Map. NaN is considered the same as NaN (even though NaN !== NaN).

const map = new Map();
map.set(NaN, 1);
console.log(map.get(NaN)); // 1

14. Iterating Map

14.1 iterating Map using for..of

const myMap = new Map();
myMap.set("one", 1);
myMap.set("two", 2);

for (const [key, value] of myMap) {
  console.log(key + " = " + value);
}

//one = 1
//two = 2

14.2 Iterating Map with forEach()

const myMap = new Map();
myMap.set("one", 1);
myMap.set("two", 2);

myMap.forEach(function (value, key) {
  console.log(key + " = " + value);
});

//one = 1
//two = 2