JavaScript Hashmaps: Objekte vs. das Map-Objekt
JavaScript hat kein direktes „HashMap“-Äquivalent wie einige andere Sprachen. Wir können jedoch ähnliche Funktionalitäten mit zwei Hauptansätzen erreichen: einfachen JavaScript-Objekten und dem eingebauten Map
-Objekt. Dieser Artikel untersucht beide und vergleicht ihre Stärken und Schwächen, um Ihnen bei der Auswahl des besten Ansatzes für Ihre Bedürfnisse zu helfen.
Inhaltsverzeichnis
Objekte als Hashmaps verwenden
JavaScript-Objekte können als einfache Hashmaps fungieren. Sie verwenden String-Schlüssel, um auf zugeordnete Werte zuzugreifen. Dieser Ansatz ist unkompliziert, hat aber Einschränkungen.
Beispiel:
const myHashMap = {}; // Erstellt ein leeres Objekt
// Einfügen von Schlüssel-Wert-Paaren
myHashMap.apple = 1;
myHashMap.banana = 2;
myHashMap.cherry = 3;
// Zugriff auf Werte
console.log(myHashMap.banana); // Ausgabe: 2
// Prüfen, ob ein Schlüssel existiert
console.log('apple' in myHashMap); // Ausgabe: true
// Löschen eines Schlüssel-Wert-Paares
delete myHashMap.banana;
// Iterieren über Schlüssel-Wert-Paare (Hinweis: Reihenfolge ist nicht garantiert)
for (const key in myHashMap) {
console.log(key, myHashMap[key]);
}
Vorteile:
- Einfach und vertraut für JavaScript-Entwickler.
- Keine externen Abhängigkeiten.
Nachteile:
- Schlüssel sind auf Strings (oder Werte, die implizit in Strings konvertiert werden) beschränkt.
- Keine integrierte Größeneigenschaft; die Größe muss manuell verfolgt werden.
- Es fehlen integrierte Methoden wie
get
,set
,has
usw. - Die Reihenfolge der Schlüssel ist nicht garantiert.
Das Map
-Objekt verwenden
Das Map
-Objekt (eingeführt in ES6) bietet eine robustere Lösung. Es unterstützt jeden Datentyp als Schlüssel, vermeidet Typumwandlungsprobleme und bietet integrierte Methoden für eine effiziente Manipulation.
Beispiel:
const myMap = new Map();
// Einfügen von Schlüssel-Wert-Paaren
myMap.set("apple", 1);
myMap.set(123, "number"); // Zahl als Schlüssel
myMap.set({ a: 1 }, "object"); // Objekt als Schlüssel
// Zugriff auf Werte
console.log(myMap.get("apple")); // Ausgabe: 1
console.log(myMap.get(123)); // Ausgabe: "number"
// Prüfen, ob ein Schlüssel existiert
console.log(myMap.has("apple")); // Ausgabe: true
// Löschen eines Schlüssel-Wert-Paares
myMap.delete("apple");
// Größe abrufen
console.log(myMap.size); // Ausgabe: 2
// Iterieren über Schlüssel-Wert-Paare (Reihenfolge wird beibehalten)
for (const [key, value] of myMap) {
console.log(key, value);
}
Vorteile:
- Unterstützt jeden Datentyp als Schlüssel.
- Bietet integrierte Methoden (
set
,get
,has
,delete
,size
). - Effizientes Iterieren mit
for...of
-Schleifen. - Behält die Einfügereihenfolge bei.
Nachteile:
- Benötigt ES6-Kompatibilität (obwohl Polyfills verfügbar sind).
Fazit
Während einfache JavaScript-Objekte für einfaches hashmap-artiges Verhalten ausreichen können, wird das Map
-Objekt aufgrund seiner überlegenen Funktionen und Effizienz im Allgemeinen empfohlen. Sofern Sie nicht stark durch die Browserkompatibilität eingeschränkt sind, ist Map
die bevorzugte Wahl für die meisten modernen JavaScript-Projekte.