Signatur
Beschreibung
isDisjointFrom() gehört zu den neuen Mengenmethoden von Set. Sie gibt true zurück, wenn die beiden Mengen disjunkt sind, also kein einziges Element gemeinsam haben. Mathematisch entspricht das der Aussage A ∩ B = ∅. Dafür muss keine Schnittmenge erzeugt werden, und die Prüfung bricht ab, sobald das erste gemeinsame Element gefunden ist.
Die Methode eignet sich für Konfliktprüfungen, zum Beispiel ob sich zwei Rollen-, Tag- oder Terminlisten überschneiden, ob ein Benutzer gesperrte Berechtigungen hat oder ob zwei Auswahlen sich gegenseitig ausschließen. Verglichen wird wie bei Set üblich nach dem Algorithmus SameValueZero: NaN gilt als gleich NaN, +0 als gleich -0, und Objekte werden nach ihrer Referenz verglichen, nicht nach ihrem Inhalt.
Das Argument muss kein echtes Set sein, aber mengenähnlich: Es braucht eine numerische Eigenschaft size sowie die Methoden has() und keys(). Eine Map erfüllt diese Anforderung, dann werden ihre Schlüssel verglichen. Ein Array erfüllt sie nicht. Je nachdem, welche Menge kleiner ist, durchläuft die Engine entweder das eigene Set und ruft other.has() auf, oder sie durchläuft other.keys() und prüft gegen das eigene Set.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $other Pflicht | Set | Map | SetLike (Objekt mit size, has(), keys()) | Die Menge, mit der verglichen wird. Sie muss mengenähnlich sein: eine Zahl in size sowie aufrufbare Methoden has() und keys(). Andernfalls wird ein TypeError geworfen. |
Beispiele
Grundlagen: gerade und ungerade Zahlen
const gerade = new Set([2, 4, 6, 8]);
const ungerade = new Set([1, 3, 5, 7]);
const primzahlen = new Set([2, 3, 5, 7]);
console.log(gerade.isDisjointFrom(ungerade)); // keine Überschneidung
console.log(gerade.isDisjointFrom(primzahlen)); // 2 ist gemeinsam
console.log(new Set().isDisjointFrom(gerade)); // leere Menge
Berechtigungsprüfung: gesperrte Rechte erkennen
const gesperrteRechte = new Set(['admin:delete', 'billing:write']);
const darfZugreifen = (benutzerRechte) =>
new Set(benutzerRechte).isDisjointFrom(gesperrteRechte);
console.log(darfZugreifen(['posts:read', 'posts:write']));
console.log(darfZugreifen(['posts:read', 'billing:write']));
Terminkonflikt: belegte Zeitslots vergleichen
const belegtAnna = new Set(['09:00', '10:00', '14:00']);
const belegtBen = new Map([
['11:00', 'Kundentermin'],
['15:00', 'Review']
]);
// Eine Map ist mengenähnlich – verglichen werden ihre Schlüssel
if (belegtAnna.isDisjointFrom(belegtBen)) {
console.log('Keine Überschneidung – gemeinsames Meeting planbar.');
} else {
console.log('Konflikt gefunden!');
}
Arrays vorher in ein Set umwandeln
const tags = new Set(['js', 'css']);
const verbotene = ['php', 'perl'];
try {
tags.isDisjointFrom(verbotene); // Array ist nicht mengenähnlich
} catch (err) {
console.log(err.constructor.name);
}
console.log(tags.isDisjointFrom(new Set(verbotene)));
// Wichtig · Fallstricke
- Arrays werden nicht akzeptiert: Ein Array hat kein
sizeund keinhas(), deshalb wird einTypeErrorgeworfen. Wandle es vorher mitnew Set(array)um. - Objekte werden nach Referenz verglichen:
new Set([{id: 1}]).isDisjointFrom(new Set([{id: 1}]))ergibttrue, weil es zwei verschiedene Objekte sind. - Kompatibilität: Seit 2024 in allen aktuellen Browsern verfügbar (Chrome/Edge 122, Firefox 127, Safari 17) sowie in Node.js ab Version 22. Standardisiert wurde die Methode mit ES2025. Für ältere Umgebungen gibt es Polyfills, etwa in
core-js. Alternativ geht auch![...a].some(x => b.has(x)). - Eigene mengenähnliche Objekte: Hier ist
sizemaßgeblich dafür, welche Seite durchlaufen wird. Stimmtsizenicht mit den tatsächlichen Elementen überein, kann das Ergebnis falsch sein. IstsizeNaNoder keine Zahl, wird einTypeErrorgeworfen. - Die Methode verändert keine der beiden Mengen.