Ce face Map.prototype.getOrInsert / getOrInsertComputed
Un tipar foarte des întâlnit este: „dacă cheia nu există, pune o valoare implicită, apoi citește valoarea”. getOrInsert face asta într-un singur apel. Dacă cheia există deja, valoarea ei nu este schimbată.
getOrInsertComputed primește o funcție în loc de valoare și o apelează doar când cheia lipsește, ceea ce evită crearea inutilă a unor obiecte sau calcule scumpe. Ambele metode există și pe WeakMap. Sunt adăugări noi în limbaj: verifică suportul înainte să le folosești în browsere.
Parametri
| Parametru | Descriere |
|---|---|
cheie |
Cheia căutată. |
valoareImplicita / functie |
Valoarea pusă dacă cheia lipsește, sau funcția care o calculează. |
Ce returnează
Valoarea existentă sau cea nou inserată.
Exemple
Exemplul 1: Gruparea cu un tablou pentru fiecare cheie
const peOrase = new Map();
const clienti = [["Iași", "Ana"], ["Cluj", "Dan"], ["Iași", "Ioana"]];
for (const [oras, nume] of clienti) {
peOrase.getOrInsertComputed(oras, () => []).push(nume);
}
console.log(peOrase);
Rezultat
Map(2) { 'Iași' => [ 'Ana', 'Ioana' ], 'Cluj' => [ 'Dan' ] }
Exemplul 2: Valoarea existentă nu este suprascrisă
const setari = new Map([["tema", "întunecată"]]);
console.log(setari.getOrInsert("tema", "deschisă"));
console.log(setari.getOrInsert("limba", "ro"));
console.log(setari);
Rezultat
întunecată
ro
Map(2) { 'tema' => 'întunecată', 'limba' => 'ro' }
Greșeli frecvente
- Folosești
getOrInsert(cheie, [])într-o buclă. Tabloul gol este creat la fiecare apel, chiar dacă nu e nevoie de el;getOrInsertComputedîl creează doar când lipsește cheia.
Comenzi înrudite
Map (get, set, has, delete): O colecție de perechi cheie–valoare în care cheile pot fi de orice tip și ordinea este păstrată.Object.groupBy / Map.groupBy: Grupează elementele unei liste după o cheie calculată, într-un obiect sau într-un Map.WeakMap: Un Map cu chei obiecte, care nu împiedică ștergerea obiectelor din memorie.