Saltar al contenido principal
12Sets y Maps

Operaciones con Sets

Trabajar con conjuntos en matemáticas tiene operaciones clásicas: unión, intersección, diferencia… Durante años, en JavaScript teníamos que reproducirlas a mano combinando spread, filter y has. Hoy, los Set traen métodos nativos para hacerlo de forma directa y legible.

Nota

Estos métodos están disponibles en los navegadores modernos y en Node.js a partir de la versión 22. Todos devuelven un nuevo Set (no modifican los originales) o un boolean, según el caso.

Para todos los ejemplos partiremos de estos dos conjuntos:

const a = new Set([1, 2, 3, 4])
const b = new Set([3, 4, 5, 6])

.union()

Devuelve un nuevo Set con los elementos que están en cualquiera de los dos conjuntos (sin duplicados).

ab123456
a.union(b) → todo lo que está en a, en b, o en ambos
const a = new Set([1, 2, 3, 4])
const b = new Set([3, 4, 5, 6])

console.log(a.union(b)) // Set(6) { 1, 2, 3, 4, 5, 6 }

.intersection()

Devuelve un nuevo Set con los elementos que están en ambos conjuntos a la vez.

ab123456
a.intersection(b) → solo lo que comparten los dos
const a = new Set([1, 2, 3, 4])
const b = new Set([3, 4, 5, 6])

console.log(a.intersection(b)) // Set(2) { 3, 4 }

.difference()

Devuelve un nuevo Set con los elementos que están en el primer conjunto pero no en el segundo. Ojo: el orden importa, no es lo mismo a.difference(b) que b.difference(a).

ab123456
a.difference(b) → lo que está en a y no en b
const a = new Set([1, 2, 3, 4])
const b = new Set([3, 4, 5, 6])

console.log(a.difference(b)) // Set(2) { 1, 2 }
console.log(b.difference(a)) // Set(2) { 5, 6 }

.symmetricDifference()

Devuelve un nuevo Set con los elementos que están en uno u otro, pero no en ambos. Es decir, lo contrario de la intersección.

ab123456
a.symmetricDifference(b) → lo que NO comparten
const a = new Set([1, 2, 3, 4])
const b = new Set([3, 4, 5, 6])

console.log(a.symmetricDifference(b)) // Set(4) { 1, 2, 5, 6 }

.isSubsetOf()

Devuelve un boolean: true si todos los elementos del primer conjunto están en el segundo.

ab12345
a.isSubsetOf(b) → a está contenido por completo dentro de b
const a = new Set([1, 2])
const b = new Set([1, 2, 3, 4, 5])

console.log(a.isSubsetOf(b)) // true
console.log(b.isSubsetOf(a)) // false

.isSupersetOf()

El espejo del anterior. Devuelve true si el primer conjunto contiene a todos los elementos del segundo.

ab12345
a.isSupersetOf(b) → a contiene por completo a b
const a = new Set([1, 2, 3, 4, 5])
const b = new Set([4, 5])

console.log(a.isSupersetOf(b)) // true
console.log(b.isSupersetOf(a)) // false

.isDisjointFrom()

Devuelve true si los dos conjuntos no comparten ningún elemento.

ab123456
a.isDisjointFrom(b) → no tienen nada en común
const a = new Set([1, 2, 3])
const b = new Set([4, 5, 6])

console.log(a.isDisjointFrom(b)) // true

const c = new Set([3, 4, 5])
console.log(a.isDisjointFrom(c)) // false (comparten el 3)

Resumen

MétodoDevuelveQué obtienes
unionSetElementos de ambos conjuntos
intersectionSetElementos comunes
differenceSetLo que está en a y no en b
symmetricDifferenceSetLo que no comparten
isSubsetOfboolean¿a está contenido en b?
isSupersetOfboolean¿a contiene a b?
isDisjointFromboolean¿no comparten nada?