Skip to content

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

EigenschaftBeschreibung
Keine DuplikateJeder Wert kommt nur einmal vor
Beliebige WertartenString, Number, Object, etc.
IterierbarKann mit for...of iteriert werden
ReihenfolgeEinfü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); // 5

10.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

MethodeBeschreibungRückgabe
add(value)Wert hinzufügenSet (für Verkettung)
delete(value)Wert entfernenBoolean (Erfolg?)
has(value)Prüfen, ob Wert existiertBoolean
clear()Alle Werte entfernenundefined
sizeAnzahl der WerteNumber

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

EigenschaftBeschreibung
Beliebige SchlüsselString, Number, Object, Function, etc.
ReihenfolgeEinfügereihenfolge wird beibehalten
Größe.size (bei Objekten muss Object.keys() verwendet werden)
IterierbarKann 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

MethodeBeschreibungRückgabe
set(key, value)Key-Value-Paar hinzufügenMap (für Verkettung)
get(key)Wert abrufenValue oder undefined
delete(key)Key-Value-Paar entfernenBoolean (Erfolg?)
has(key)Prüfen, ob Key existiertBoolean
clear()Alle Einträge entfernenundefined
sizeAnzahl der EinträgeNumber

10.6 Set / Map vs Objekte / Arrays

📊 Vergleich: Set vs Array

EigenschaftSetArray
Duplikate❌ Nicht erlaubt✅ Erlaubt
Suchen (has)O(1) - Sehr schnellO(n) - Langsam
Größe.size.length
Duplikate entfernen✅ Einfach (automatisch)❌ Umständlich

📊 Vergleich: Map vs Objekt

EigenschaftMapObjekt
Schlüssel-TypBeliebig (String, Number, Object, etc.)Nur String oder Symbol
Reihenfolge✅ Einfügereihenfolge❌ Nicht garantiert (bei Zahlen sortiert)
Größe.sizeObject.keys(obj).length
Iteration✅ Direkt iterierbar❌ Nur über Object.keys(), etc.
Leistung✅ Besser bei häufigen Hinzufügen/Löschen❌ Schlechter

🎯 Wann was verwenden?

SzenarioEmpfehlung
Duplikate verhindernSet
Blitzschnelles Suchen (has)Set oder Map
Key-Value mit beliebigen SchlüsselnMap
Einfache Key-Value (String-Schlüssel)Objekt
Geordnete DatenMap 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: Set vs Array, Map vs Objekt

📝 Übung

  1. Set verwenden:

    javascript
    const numbers = [1, 2, 2, 3, 3, 4];
    // Entferne Duplikate mit Set
  2. Map verwenden:

    javascript
    // Erstelle eine Map und füge 3 Key-Value-Paare hinzu
    // Schlüssel: "name", "alter", "stadt"
  3. Set vs Array:

    javascript
    const 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!

Frei für alle Anfänger