MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Map

Obiectul Map, sau dicționar, reprezintă o structură de date în care fiecare element are o cheie și o valoare. Cheile în cadrul dicționarului sunt unice, adică unui singur chei îi poate fi asociat doar un element. Pentru a crea un dicționar, se utilizează constructorul obiectului Map:

const myMap = new Map();

De asemenea, se poate inițializa dicționarul cu valori inițiale. Pentru aceasta, se transmite un array către constructor, în care elementele reprezintă alte array-uri cu două elemente - primul element va fi cheia, iar al doilea va fi valoarea:

const myMap = new Map([[1, "a"], [2, "b"], [3, "c"]]);
console.log(myMap);     // Map(3){1 => "a", 2 => "b", 3 => "c"}

În acest caz, numerele 1, 2, 3 sunt chei, iar șirurile "a", "b", "c" sunt valorile.

Menționăm că cheile și valorile nu neapărat trebuie să fie de același tip. Tipul cheilor și al valorilor pot să coincidă:

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);
console.log(dict);  // Harta(3) {"red" => "roșu", "green" => "verde", "blue" => "albastru"}

Dimensiunea dicționarului

Cu ajutorul proprietății size poți verifica numărul de elemente dintr-un Map:

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);
console.log(dict.size);     // 3

Adăugarea și modificarea elementelor

Pentru a seta o valoare, se folosește metoda set():

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);
dict.set("yellow", "galben");        // adăugare element
dict.set("red", "roșu închis");       // modificare element
console.log(dict);      // Map(4) {"red" => "roșu închis", "green" => "verde", "blue" => "albastru", "yellow" => "galben"}

Primul parametru al metodei set() reprezintă cheia, iar al doilea parametru - valoarea elementului. Dacă nu există elemente pentru acea cheie, se adaugă un nou element. Dacă cheia există deja, elementul existent își schimbă valoarea.

Obținerea elementelor

Pentru a obține un element după cheie, se folosește metoda get(), căreia i se furnizează cheia elementului:

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);
console.log(dict.get("red"));  // roșu închis
console.log(dict.get("violet"));  // undefined

Dacă map nu conține un element cu cheia specificată, metoda returnează undefined.

Pentru a evita returnarea valorii undefined, putem verifica existența elementului după cheie cu ajutorul metodei has(). Dacă elementul există după cheie, metoda returnează true, în caz contrar se returnează false:

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);
console.log(dict.has("red"));  // true
console.log(dict.has("violet"));  // false

if(dict.has("red")) console.log(dict.get("red"));   // roșu închis

Ștergerea elementelor

Pentru a șterge un singur element după cheie, se folosește metoda delete():

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);
dict.delete("red");  
console.log(dict);  // Map(2){"green" => "verde", "blue" => "albastru"}

Pentru a șterge toate elementele, se utilizează metoda clear():

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);
dict.clear();
console.log(dict);  // Map(0){}

Parcurgerea elementelor

Pentru a parcurge elementele, se folosește metoda forEach:

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);
dict.forEach(function(value, key, map){
   console.log(key, ":", value);
})

Metoda forEach primește o funcție de callback ca parametru, care are trei parametri. Primul și al doilea parametru sunt, în ordine, valoarea și cheia elementului curent, iar al treilea parametru este obiectul Map parcurs.

Output-ul în consolă pentru acest exemplu este:

red : roșu
green : verde
blue : albastru

De asemenea, pentru a parcurge un obiect Map se poate folosi și un ciclu, de exemplu, un ciclu for...of:

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);

for (item of dict) {
   console.log(item[0], ":", item[1]);
}

Fiecare element din Map este plasat în variabila item, care, la rândul ei, reprezintă un array. Primul element al acestui array este cheia, iar al doilea element este valoarea elementului.

De asemenea, obiectul Map are două metode suplimentare: keys() permite parcurgerea doar a cheilor, iar values() permite parcurgerea valorilor elementelor. Ambele metode returnează iteratori, astfel încât pentru a parcurge cheile și valorile separat, se poate utiliza, de asemenea, un ciclu for...of:

const dict = new Map([["red", "roșu"], ["green", "verde"], ["blue", "albastru"]]);

for (item of dict.keys()) {
   console.log(item);
}
// Output în consolă:
// red
// green
// blue

for (item of dict.values()) {
   console.log(item);
}
// Output în consolă:
// roșu
// verde
// albastru