Signatur
Beschreibung
Die Methode isSupersetOf() beantwortet die Frage: „Ist das andere Set vollständig in diesem Set enthalten?“ Mathematisch gesprochen prüft sie, ob this ⊇ other gilt. Sie gibt true zurück, wenn jedes Element von other auch in diesem Set vorkommt. Sonst gibt sie false zurück. Das ursprüngliche Set wird dabei nicht verändert.
Typische Einsätze sind Berechtigungsprüfungen (Hat ein Benutzer alle nötigen Rechte?), die Prüfung von Voraussetzungen (Sind alle Pflichtfelder, Module oder Abhängigkeiten vorhanden?) und die Validierung von Feature-Flags. Früher brauchte man dafür eine Kombination wie [...other].every(x => set.has(x)). isSupersetOf() ist kürzer, besser lesbar und kann früher abbrechen.
Als Argument ist nicht nur ein echtes Set erlaubt, sondern jedes set-ähnliche Objekt: Es braucht eine numerische Eigenschaft size, eine Methode has() und eine Methode keys(), die einen Iterator liefert. Deshalb funktioniert auch eine Map, denn dort werden ihre Schlüssel verglichen. Ist dieses Set kleiner als other.size, gibt die Methode sofort false zurück. Sonst durchläuft sie other.keys() und prüft jedes Element mit this.has().
Elemente werden nach dem Algorithmus SameValueZero verglichen, also wie bei Set.prototype.has(). Daher gilt NaN als gleich NaN, und +0 gilt als gleich -0. Objekte werden über ihre Referenz verglichen, nicht über ihren Inhalt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $other Pflicht | Set | Map | set-ähnliches Objekt ({ size: number, has(value): boolean, keys(): Iterator }) | Das Set, dessen Elemente vollständig in diesem Set enthalten sein müssen. Arrays sind nicht erlaubt, weil sie keine Eigenschaft size und keine Methode has() haben. Wandle sie vorher mit new Set(array) um. |
Rückgabewert
true, wenn alle Elemente von other auch in diesem Set enthalten sind, sonst false. Ist other leer, ist das Ergebnis immer true.Beispiele
Grundlagen: Obermenge prüfen
const zahlen = new Set([1, 2, 3, 4, 5, 6]);
const gerade = new Set([2, 4, 6]);
const gemischt = new Set([2, 7]);
console.log(zahlen.isSupersetOf(gerade)); // alle enthalten
console.log(zahlen.isSupersetOf(gemischt)); // 7 fehlt
console.log(zahlen.isSupersetOf(zahlen)); // jedes Set ist Obermenge von sich selbst
console.log(zahlen.isSupersetOf(new Set())); // leere Menge ist immer enthalten
Praxis: Benutzerrechte prüfen
const benutzerRechte = new Set(['lesen', 'schreiben', 'kommentieren']);
const erforderlich = {
artikelBearbeiten: new Set(['lesen', 'schreiben']),
artikelLoeschen: new Set(['lesen', 'schreiben', 'loeschen'])
};
const darf = (aktion) => benutzerRechte.isSupersetOf(erforderlich[aktion]);
console.log(`Bearbeiten erlaubt: ${darf('artikelBearbeiten')}`);
console.log(`Löschen erlaubt: ${darf('artikelLoeschen')}`);
Pflichtfelder eines Formulars mit Array- und Map-Daten prüfen
const pflichtfelder = ['name', 'email'];
const formular = new Map([
['name', 'Anna'],
['email', 'anna@example.com'],
['telefon', '']
]);
// Map ist set-ähnlich: verglichen werden die Schlüssel
const vorhanden = new Set(formular.keys());
console.log(vorhanden.isSupersetOf(new Set(pflichtfelder)));
// Map direkt als Argument: prüft, ob alle Map-Schlüssel im Set sind
const erlaubteFelder = new Set(['name', 'email', 'telefon', 'firma']);
console.log(erlaubteFelder.isSupersetOf(formular));
Feature-Detection mit Fallback
const istObermenge = (a, b) =>
typeof a.isSupersetOf === 'function'
? a.isSupersetOf(b)
: a.size >= b.size && [...b].every((x) => a.has(x));
const installiert = new Set(['react', 'react-dom', 'vite']);
const benoetigt = new Set(['react', 'react-dom']);
console.log(istObermenge(installiert, benoetigt));
// Wichtig · Fallstricke
- Keine Arrays als Argument:
set.isSupersetOf([1, 2])wirft einenTypeError, weil einem Arraysizeundhas()fehlen. Wandle es daher vorher mitnew Set(array)um. - Richtung nicht verwechseln:
a.isSupersetOf(b)bedeutet „a enthält b“. Das Gegenstück istb.isSubsetOf(a). - Objekte werden über ihre Referenz verglichen:
new Set([{id: 1}]).isSupersetOf(new Set([{id: 1}]))ergibtfalse, weil es zwei verschiedene Objekte sind. Vergleiche besser einfache Schlüssel wie IDs. - Set-ähnliche Objekte: Ist
sizeNaNoder fehlenhasbzw.keys, wirft die Methode einenTypeError. Bei einerMapwerden nur die Schlüssel geprüft, nicht die Werte. - Kompatibilität: Die Methode gehört zu den neuen Set-Methoden (ES2025) und ist erst seit 2024 in allen großen Browsern verfügbar (Chrome/Edge 122, Firefox 127, Safari 17, Node.js 22). Ältere Umgebungen brauchen einen Polyfill (z. B.
core-js) oder einen Fallback mitevery(). - Leistung: Die Methode bricht sofort ab, wenn dieses Set kleiner ist als
other.sizeoder ein Element fehlt. Die Laufzeit liegt bei O(n), wobei n die Größe vonotherist.