Start · Sprachen · JavaScript · Referenz · Set.prototype.isSupersetOf()

Set.prototype.isSupersetOf()

Methode

Prüft, ob dieses <code>Set</code> alle Elemente eines anderen Sets bzw. set-ähnlichen Objekts enthält, und gibt <code>true</code> oder <code>false</code> zurück.

seit JavaScript ES2025 – Baseline 2024 (Chrome/Edge 122, Firefox 1 Kategorie: method-property

Signatur

Set.prototype.isSupersetOf(other)

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

Typ
boolean
Beschreibung
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
true false true true

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')}`);
Bearbeiten erlaubt: true Löschen erlaubt: false

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));
true true

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));
true

// Wichtig · Fallstricke

  • Keine Arrays als Argument: set.isSupersetOf([1, 2]) wirft einen TypeError, weil einem Array size und has() fehlen. Wandle es daher vorher mit new Set(array) um.
  • Richtung nicht verwechseln: a.isSupersetOf(b) bedeutet „a enthält b“. Das Gegenstück ist b.isSubsetOf(a).
  • Objekte werden über ihre Referenz verglichen: new Set([{id: 1}]).isSupersetOf(new Set([{id: 1}])) ergibt false, weil es zwei verschiedene Objekte sind. Vergleiche besser einfache Schlüssel wie IDs.
  • Set-ähnliche Objekte: Ist size NaN oder fehlen has bzw. keys, wirft die Methode einen TypeError. Bei einer Map werden 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 mit every().
  • Leistung: Die Methode bricht sofort ab, wenn dieses Set kleiner ist als other.size oder ein Element fehlt. Die Laufzeit liegt bei O(n), wobei n die Größe von other ist.