Signatur
Beschreibung
intersection() berechnet die mathematische Schnittmenge A ∩ B: Das Ergebnis enthält genau die Werte, die in beiden Mengen vorhanden sind. Die ursprüngliche Menge und das Argument bleiben unverändert, zurückgegeben wird immer eine neue Set-Instanz.
Typische Einsatzfälle sind der Abgleich von Berechtigungen (erforderliche vs. vorhandene Rechte), gemeinsame Tags, Filter oder Freundeslisten, oder das Finden überlappender IDs aus zwei Datenquellen. Bisher schrieb man dafür new Set([...a].filter(x => b.has(x))) – die native Methode ist lesbarer und in der Regel effizienter.
Das Argument muss kein echtes Set sein, sondern nur Set-ähnlich: Es braucht eine numerische Eigenschaft size sowie die Methoden has() und keys(). Damit funktionieren z. B. auch Map-Objekte (verglichen werden deren Schlüssel). Ein normales Array ist dagegen nicht Set-ähnlich und löst einen TypeError aus.
Gleichheit wird wie bei Set üblich per SameValueZero geprüft: NaN gilt als gleich NaN, Objekte werden nur per Referenz verglichen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $other Pflicht | Set|Map|SetLike | Die zweite Menge. Muss Set-ähnlich sein, d. h. size (Zahl), has(value) und keys() (liefert einen Iterator) besitzen. |
Rückgabewert
Set mit allen Elementen, die sowohl in this als auch in other enthalten sind. Ist die Schnittmenge leer, wird eine leere Set zurückgegeben.Beispiele
Einfache Schnittmenge zweier Zahlenmengen
const ungerade = new Set([1, 3, 5, 7, 9]);
const primzahlen = new Set([2, 3, 5, 7]);
const beides = ungerade.intersection(primzahlen);
console.log(beides);
console.log(beides.size);
Berechtigungen prüfen: welche erforderlichen Rechte hat der Nutzer?
const erforderlich = new Set(['read', 'write', 'delete']);
const nutzerRechte = new Set(['read', 'write', 'share']);
const vorhanden = erforderlich.intersection(nutzerRechte);
const vollstaendig = vorhanden.size === erforderlich.size;
console.log([...vorhanden]);
console.log(vollstaendig ? 'Zugriff erlaubt' : 'Zugriff verweigert');
Map als Set-ähnliches Argument – gemeinsame IDs finden
const warenkorbIds = new Set([101, 205, 309, 412]);
// Map: Produkt-ID -> Rabatt in Prozent
const rabatte = new Map([
[205, 10],
[412, 25],
[999, 5],
]);
// Verglichen werden die Schlüssel der Map
const rabattiert = warenkorbIds.intersection(rabatte);
for (const id of rabattiert) {
console.log(`Produkt ${id}: ${rabatte.get(id)} % Rabatt`);
}
Arrays vorher in ein Set umwandeln
const tagsA = ['js', 'css', 'html', 'node'];
const tagsB = ['node', 'deno', 'js'];
// tagsB direkt zu übergeben würde einen TypeError auslösen
const gemeinsam = new Set(tagsA).intersection(new Set(tagsB));
console.log([...gemeinsam].sort());
// Wichtig · Fallstricke
- Reihenfolge nicht garantiert wie erwartet: Aus Effizienzgründen iteriert die Engine über die kleinere Menge. Ist
this.size > other.size, folgt das Ergebnis der Reihenfolge vonother.keys(). Verlassen Sie sich daher nicht auf die Einfügereihenfolge, sondern sortieren Sie bei Bedarf. - Keine Arrays als Argument:
set.intersection([1, 2])wirft einenTypeError, weil Arrays keinsizeund keinhas()besitzen. Vorhernew Set(array)verwenden. - Ungültiges
size: Istother.sizeundefinedoderNaN, wird einTypeErrorausgelöst; ein negativessizeführt zu einemRangeError. - Objektvergleich per Referenz: Zwei inhaltsgleiche Objekte wie
{id: 1}gelten als verschieden. Für Datensätze besser primitive Schlüssel (IDs) in die Mengen legen. - Kompatibilität: Neu seit ES2025 (Baseline seit Juni 2024). In älteren Browsern und Node.js < 22 nicht vorhanden – dort Polyfill (z. B. core-js) oder den Fallback
new Set([...a].filter(x => b.has(x)))nutzen. Verfügbarkeit prüfen mittypeof Set.prototype.intersection === 'function'.