Signatur
Beschreibung
Die Methode delete() entfernt den Eintrag mit dem Schlüssel key aus der Map. Gab es den Schlüssel, liefert sie true. Gab es ihn nicht, liefert sie false und die Map bleibt unverändert. Deshalb braucht man vor dem Löschen kein has(): Der Rückgabewert zeigt bereits, ob etwas entfernt wurde.
Schlüssel werden nach dem Algorithmus SameValueZero verglichen. Primitive Werte wie Zeichenketten und Zahlen werden nach ihrem Wert verglichen. NaN gilt als gleich NaN, und +0 und -0 gelten als derselbe Schlüssel. Objekte, Arrays und Funktionen werden dagegen nach ihrer Identität verglichen: Zum Löschen braucht man genau dieselbe Referenz, die beim set() benutzt wurde.
Typische Einsatzfälle sind Caches, in denen abgelaufene Einträge entfernt werden, Listen aktiver Verbindungen oder Sitzungen und Zuordnungen von DOM-Elementen oder IDs zu Zustandsdaten. Wenn Einträge häufig hinzugefügt und entfernt werden, ist Map mit delete() meist besser geeignet als ein einfaches Objekt mit dem delete-Operator.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $key Pflicht | any | Der Schlüssel des Eintrags, der entfernt werden soll. Verglichen wird nach SameValueZero, Objekte also nach ihrer Referenz. |
Rückgabewert
true, wenn ein Eintrag im Map-Objekt erfolgreich entfernt wurde. false, wenn der Schlüssel in der Map nicht gefunden wurde.Beispiele
Eintrag löschen und Rückgabewert prüfen
const lager = new Map([
['äpfel', 12],
['birnen', 5]
]);
console.log(lager.delete('äpfel')); // vorhanden
console.log(lager.delete('kirschen')); // nicht vorhanden
console.log(lager.has('äpfel'));
console.log(lager.size);
Abgelaufene Einträge aus einem Cache entfernen
const cache = new Map();
const setzen = (schluessel, wert, ttlMs) => {
cache.set(schluessel, { wert, ablauf: Date.now() + ttlMs });
};
const aufraeumen = () => {
const jetzt = Date.now();
// Löschen während der Iteration ist bei Map sicher
for (const [schluessel, eintrag] of cache) {
if (eintrag.ablauf <= jetzt) cache.delete(schluessel);
}
};
setzen('user:1', { name: 'Anna' }, -1); // bereits abgelaufen
setzen('user:2', { name: 'Ben' }, 60_000);
aufraeumen();
console.log([...cache.keys()]);
Objekt-Schlüssel: nur dieselbe Referenz löscht den Eintrag
const sitzungen = new Map();
const client = { id: 42 };
sitzungen.set(client, { verbunden: new Date() });
// Ein neues Objekt mit gleichem Inhalt ist ein anderer Schlüssel
console.log(sitzungen.delete({ id: 42 }));
console.log(sitzungen.delete(client));
console.log(sitzungen.size);
Sonderfälle NaN und -0
const m = new Map([[NaN, 'keine Zahl'], [0, 'null']]);
console.log(m.delete(NaN)); // NaN gilt als gleich NaN
console.log(m.delete(-0)); // -0 und +0 sind derselbe Schlüssel
console.log(m.size);
// Wichtig · Fallstricke
- Nicht mit dem
delete-Operator verwechseln:delete map[key]entfernt keinen Eintrag aus derMap. Der Operator wirkt nur auf Eigenschaften des Objekts selbst. Verwende immermap.delete(key). - Referenzvergleich bei Objekten: Ein neu erzeugtes Objekt mit gleichem Inhalt passt nicht zum gespeicherten Schlüssel. Bewahre deshalb die ursprüngliche Referenz auf oder nimm primitive Schlüssel wie IDs.
- Löschen während der Iteration mit
for...ofoderforEach()ist erlaubt und sicher. Bereits gelöschte Einträge, die noch nicht erreicht wurden, werden dann nicht mehr besucht. - Nicht verkettbar: Anders als
set()gibtdelete()einenbooleanzurück und nicht dieMap.map.delete(a).delete(b)funktioniert also nicht. - Um alle Einträge zu entfernen, ist
clear()einfacher und schneller als mehreredelete()-Aufrufe. - Soll ein Eintrag automatisch verschwinden, wenn sein Schlüsselobjekt nicht mehr verwendet wird, ist
WeakMapdie bessere Wahl. - Kompatibilität: Wird seit ES2015 von allen modernen Browsern und Node.js unterstützt (Baseline).