Appearance
Kapitel 10: Set und Map Datenstrukturen
10.1 Was ist ein Set? (Sammlung ohne Duplikate)
📦 Was ist Set?
Ein Set ist eine Sammlung von Werten, bei der jeder Wert nur einmal vorkommt (keine Duplikate).
javascript
// Syntax
const meinSet = new Set([iterable]);🎯 Eigenschaften von Set
| Eigenschaft | Beschreibung |
|---|---|
| Keine Duplikate | Jeder Wert kommt nur einmal vor |
| Beliebige Wertarten | String, Number, Object, etc. |
| Iterierbar | Kann mit for...of iteriert werden |
| Reihenfolge | Einfügereihenfolge wird beibehalten |
📝 Einfaches Beispiel
javascript
// Set erstellen
const mySet = new Set([1, 2, 3, 3, 4, 4, 5]);
console.log(mySet);
// Set(5) {1, 2, 3, 4, 5} ✅ (Duplikate entfernt)
console.log(mySet.size); // 510.2 Set-Methoden: add / delete / has / clear
➕ add(value) - Wert hinzufügen
javascript
const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(2); // Duplikat - wird nicht hinzugefügt!
mySet.add(3);
console.log(mySet); // Set(3) {1, 2, 3}Hinweis: add() gibt das Set zurück (kann verkettet werden).
javascript
const mySet = new Set();
mySet.add(1).add(2).add(3);
console.log(mySet); // Set(3) {1, 2, 3}❌ delete(value) - Wert entfernen
javascript
const mySet = new Set([1, 2, 3, 4, 5]);
mySet.delete(3); // true (Erfolg)
mySet.delete(99); // false (nicht gefunden)
console.log(mySet); // Set(4) {1, 2, 4, 5}✅ has(value) - Prüfen, ob Wert existiert
javascript
const mySet = new Set([1, 2, 3]);
console.log(mySet.has(2)); // true
console.log(mySet.has(99)); // false🧹 clear() - Alle Werte entfernen
javascript
const mySet = new Set([1, 2, 3]);
mySet.clear();
console.log(mySet); // Set(0) {}
console.log(mySet.size); // 0📊 Übersicht: Set-Methoden
| Methode | Beschreibung | Rückgabe |
|---|---|---|
add(value) | Wert hinzufügen | Set (für Verkettung) |
delete(value) | Wert entfernen | Boolean (Erfolg?) |
has(value) | Prüfen, ob Wert existiert | Boolean |
clear() | Alle Werte entfernen | undefined |
size | Anzahl der Werte | Number |
10.3 Array-Duplikate entfernen (Praxis)
🔥 Methode 1: Set + Spread-Operator
javascript
const numbers = [1, 2, 2, 3, 3, 4, 5, 5];
// ❌ Alte Methode (ES5) - mit filter
var unique1 = numbers.filter((value, index, self) => {
return self.indexOf(value) === index;
});
console.log(unique1); // [1, 2, 3, 4, 5]
// ✅ Neue Methode (ES6) - mit Set + Spread
const unique2 = [...new Set(numbers)];
console.log(unique2); // [1, 2, 3, 4, 5]🔥 Methode 2: Set + Array.from()
javascript
const numbers = [1, 2, 2, 3, 3, 4, 5, 5];
const unique = Array.from(new Set(numbers));
console.log(unique); // [1, 2, 3, 4, 5]🔥 Praxisbeispiel: String-Duplikate entfernen
javascript
const str = "hello";
// String in Set (entfernt Duplikate) → zurück in String
const uniqueChars = [...new Set(str)].join("");
console.log(uniqueChars); // "helo" ✅🔥 Praxisbeispiel: Objekte nach Eigenschaft deduplizieren
javascript
const users = [
{ id: 1, name: "Max" },
{ id: 2, name: "Erika" },
{ id: 1, name: "Max" } // Duplikat
];
// Nach id deduplizieren
const uniqueUsers = Array.from(
new Map(users.map(user => [user.id, user])).values()
);
console.log(uniqueUsers);
// [
// { id: 1, name: "Max" },
// { id: 2, name: "Erika" }
// ]10.4 Was ist eine Map? (Key-Value-Struktur mit beliebigen Schlüsseln)
🗺️ Was ist Map?
Eine Map ist eine Key-Value-Datenstruktur, bei der Schlüssel beliebige Datentypen sein können (nicht nur Strings wie bei Objekten).
javascript
// Syntax
const meineMap = new Map([iterable]);🎯 Eigenschaften von Map
| Eigenschaft | Beschreibung |
|---|---|
| Beliebige Schlüssel | String, Number, Object, Function, etc. |
| Reihenfolge | Einfügereihenfolge wird beibehalten |
| Größe | .size (bei Objekten muss Object.keys() verwendet werden) |
| Iterierbar | Kann direkt mit for...of iteriert werden |
📝 Einfaches Beispiel
javascript
const myMap = new Map();
myMap.set("name", "Max");
myMap.set(25, "Alter");
myMap.set(true, "Ist aktiv");
console.log(myMap);
// Map(3) {
// "name" => "Max",
// 25 => "Alter",
// true => "Ist aktiv"
// }10.5 Map-Methoden
➕ set(key, value) - Key-Value-Paar hinzufügen
javascript
const myMap = new Map();
myMap.set("name", "Max");
myMap.set("alter", 25);
// Verkettung möglich
myMap.set("stadt", "Berlin").set("land", "Deutschland");
console.log(myMap);
// Map(4) {"name" => "Max", "alter" => 25, "stadt" => "Berlin", "land" => "Deutschland"}➖ get(key) - Wert abrufen
javascript
const myMap = new Map();
myMap.set("name", "Max");
console.log(myMap.get("name")); // "Max"
console.log(myMap.get("alter")); // undefined (nicht vorhanden)❌ delete(key) - Key-Value-Paar entfernen
javascript
const myMap = new Map();
myMap.set("name", "Max");
myMap.set("alter", 25);
myMap.delete("alter");
console.log(myMap); // Map(1) {"name" => "Max"}✅ has(key) - Prüfen, ob Key existiert
javascript
const myMap = new Map();
myMap.set("name", "Max");
console.log(myMap.has("name")); // true
console.log(myMap.has("alter")); // false🧹 clear() - Alle Einträge entfernen
javascript
const myMap = new Map();
myMap.set("a", 1);
myMap.set("b", 2);
myMap.clear();
console.log(myMap.size); // 0📏 size - Anzahl der Einträge
javascript
const myMap = new Map();
myMap.set("a", 1);
myMap.set("b", 2);
myMap.set("c", 3);
console.log(myMap.size); // 3📊 Übersicht: Map-Methoden
| Methode | Beschreibung | Rückgabe |
|---|---|---|
set(key, value) | Key-Value-Paar hinzufügen | Map (für Verkettung) |
get(key) | Wert abrufen | Value oder undefined |
delete(key) | Key-Value-Paar entfernen | Boolean (Erfolg?) |
has(key) | Prüfen, ob Key existiert | Boolean |
clear() | Alle Einträge entfernen | undefined |
size | Anzahl der Einträge | Number |
10.6 Set / Map vs Objekte / Arrays
📊 Vergleich: Set vs Array
| Eigenschaft | Set | Array |
|---|---|---|
| Duplikate | ❌ Nicht erlaubt | ✅ Erlaubt |
Suchen (has) | O(1) - Sehr schnell | O(n) - Langsam |
| Größe | .size | .length |
| Duplikate entfernen | ✅ Einfach (automatisch) | ❌ Umständlich |
📊 Vergleich: Map vs Objekt
| Eigenschaft | Map | Objekt |
|---|---|---|
| Schlüssel-Typ | Beliebig (String, Number, Object, etc.) | Nur String oder Symbol |
| Reihenfolge | ✅ Einfügereihenfolge | ❌ Nicht garantiert (bei Zahlen sortiert) |
| Größe | .size | Object.keys(obj).length |
| Iteration | ✅ Direkt iterierbar | ❌ Nur über Object.keys(), etc. |
| Leistung | ✅ Besser bei häufigen Hinzufügen/Löschen | ❌ Schlechter |
🎯 Wann was verwenden?
| Szenario | Empfehlung |
|---|---|
| Duplikate verhindern | Set |
Blitzschnelles Suchen (has) | Set oder Map |
| Key-Value mit beliebigen Schlüsseln | Map |
| Einfache Key-Value (String-Schlüssel) | Objekt |
| Geordnete Daten | Map oder Array |
💡 Code-Beispiel: Map mit Objekt-Schlüsseln
javascript
// ✅ Map erlaubt Objekte als Schlüssel
const user1 = { id: 1, name: "Max" };
const user2 = { id: 2, name: "Erika" };
const userRoles = new Map();
userRoles.set(user1, "Admin");
userRoles.set(user2, "User");
console.log(userRoles.get(user1)); // "Admin"
// ❌ Objekt kann keine Objekte als Schlüssel haben
const badObj = {};
badObj[user1] = "Admin";
console.log(badObj); // { "[object Object]": "Admin" } ❌ (Schlüssel wird zu String!)🎉 Zusammenfassung
In diesem Kapitel hast du gelernt:
- ✅
Set- Sammlung ohne Duplikate - ✅
Set-Methoden (add,delete,has,clear) - ✅ Array-Duplikate entfernen mit
Set - ✅
Map- Key-Value-Struktur mit beliebigen Schlüsseln - ✅
Map-Methoden (set,get,delete,has,clear,size) - ✅ Vergleich:
SetvsArray,MapvsObjekt
📝 Übung
Set verwenden:
javascriptconst numbers = [1, 2, 2, 3, 3, 4]; // Entferne Duplikate mit SetMap verwenden:
javascript// Erstelle eine Map und füge 3 Key-Value-Paare hinzu // Schlüssel: "name", "alter", "stadt"Set vs Array:
javascriptconst array1 = [1, 2, 3]; const array2 = [2, 3, 4]; // Finde die gemeinsamen Elemente (Intersection)
➡️ Nächstes Kapitel
In Kapitel 11 lernen wir Promise (asynchrone Programmierung) - eines der wichtigsten Konzepte in modernem JavaScript!
