Map (get, set, has, delete) în JavaScript

Map și Set ES2015 (ES6)

O colecție de perechi cheie–valoare în care cheile pot fi de orice tip și ordinea este păstrată.

Sintaxă
const map = new Map([[cheie, valoare], ...]);
map.set(cheie, valoare)
map.get(cheie)
map.has(cheie)
map.delete(cheie)
map.clear()

Ce face Map (get, set, has, delete)

Map seamănă cu un obiect folosit ca dicționar, dar cheile pot fi orice: numere, obiecte, funcții. Ordinea de inserare este păstrată, iar numărul de elemente este în proprietatea size.

set adaugă sau înlocuiește o valoare și returnează Map-ul (deci apelurile se pot înlănțui), get o citește (undefined dacă lipsește), has verifică existența cheii, delete o șterge și returnează true dacă exista, iar clear golește colecția.

Folosește Map când cheile se adaugă și se șterg des sau nu sunt texte. Pentru date fixe, structurate (un utilizator, o setare), un obiect simplu rămâne mai potrivit.

Parametri

Parametru Descriere
perechi Opțional, la creare: un iterabil cu perechi [cheie, valoare].

Ce returnează

Un obiect Map.

Exemple

Exemplul 1: Operațiile de bază

const stoc = new Map([["mere", 30]]);

stoc.set("pere", 12).set("prune", 0);
console.log(stoc.get("pere"), stoc.get("caise"));
console.log(stoc.has("prune"), stoc.size);
console.log(stoc.delete("prune"), stoc.delete("prune"));
console.log(stoc);
stoc.clear();
console.log(stoc.size);

Rezultat

12 undefined
true 3
true false
Map(2) { 'mere' => 30, 'pere' => 12 }
0

Exemplul 2: Chei care nu sunt texte

const ana = { nume: "Ana" };
const mihai = { nume: "Mihai" };
const vizite = new Map();

vizite.set(ana, 3).set(mihai, 1).set(1, "cheie numerică").set("1", "cheie text");
console.log(vizite.get(ana), vizite.get(1), vizite.get("1"));

const obiect = {};
obiect[ana] = 3;
obiect[mihai] = 1;
console.log(obiect);

Rezultat

3 cheie numerică cheie text
{ '[object Object]': 1 }

Exemplul 3: Numărarea cuvintelor

const text = "da nu da poate da nu";
const frecventa = new Map();

for (const cuvant of text.split(" ")) {
  frecventa.set(cuvant, (frecventa.get(cuvant) ?? 0) + 1);
}
console.log([...frecventa]);

Rezultat

[ [ 'da', 3 ], [ 'nu', 2 ], [ 'poate', 1 ] ]

Greșeli frecvente

  • Scrii map["cheie"] = valoare. Creezi o proprietate obișnuită, pe care get, has și size nu o văd. Folosește set.
  • Transformi un Map în JSON direct: JSON.stringify(map) dă "{}". Transformă-l întâi cu Object.fromEntries(map).

Comenzi înrudite