1
+ // TEORÍA: Conjuntos (Sets) en JavaScript
2
+ /*
3
+ * Un Set en JavaScript es una estructura de datos que permite almacenar valores únicos
4
+ * de cualquier tipo. A diferencia de los arrays:
5
+ * - Los elementos en un Set son únicos
6
+ * - No hay índices numéricos para acceder a los elementos
7
+ * - El orden de los elementos se mantiene según el orden de inserción
8
+ *
9
+ * Los Sets son útiles cuando necesitamos asegurarnos de que no hay duplicados
10
+ * y cuando el orden de los elementos no es crucial.
11
+ */
12
+
13
+ // Función principal que demuestra todas las operaciones
14
+ function demostracionSets ( ) {
15
+ console . log ( "PARTE 1: OPERACIONES BÁSICAS CON SETS" ) ;
16
+
17
+ // Creación de un Set
18
+ let conjunto = new Set ( ) ;
19
+ console . log ( "Conjunto inicial:" , conjunto ) ;
20
+
21
+ // 1. Añadir un elemento al final
22
+ conjunto . add ( "Elemento1" ) ;
23
+ console . log ( "Después de añadir un elemento:" , conjunto ) ;
24
+
25
+ // 2. Añadir un elemento al "principio"
26
+ // NOTA: En realidad, en un Set no hay concepto de principio o final
27
+ conjunto . add ( "Elemento2" ) ;
28
+ console . log ( "Después de añadir otro elemento:" , conjunto ) ;
29
+
30
+ // 3. Añadir varios elementos en bloque
31
+ const nuevosElementos = [ "Elemento3" , "Elemento4" , "Elemento5" ] ;
32
+ nuevosElementos . forEach ( elemento => conjunto . add ( elemento ) ) ;
33
+ console . log ( "Después de añadir varios elementos:" , conjunto ) ;
34
+
35
+ // 4. Añadir elementos en una posición concreta
36
+ // NOTA: Los Sets no permiten insertar en posiciones específicas
37
+ // Podemos convertir a array, modificar y volver a Set
38
+ let arrayTemporal = Array . from ( conjunto ) ;
39
+ arrayTemporal . splice ( 2 , 0 , "ElementoA" , "ElementoB" ) ;
40
+ conjunto = new Set ( arrayTemporal ) ;
41
+ console . log ( "Después de 'insertar' en posición específica:" , conjunto ) ;
42
+
43
+ // 5. Eliminar un elemento
44
+ conjunto . delete ( "Elemento3" ) ;
45
+ console . log ( "Después de eliminar 'Elemento3':" , conjunto ) ;
46
+
47
+ // 6. Actualizar un elemento
48
+ // NOTA: No se pueden actualizar elementos directamente
49
+ // Hay que eliminar el viejo y añadir el nuevo
50
+ if ( conjunto . delete ( "Elemento4" ) ) {
51
+ conjunto . add ( "Elemento4Actualizado" ) ;
52
+ }
53
+ console . log ( "Después de actualizar 'Elemento4':" , conjunto ) ;
54
+
55
+ // 7. Comprobar si un elemento está en el conjunto
56
+ const contiene = conjunto . has ( "Elemento1" ) ;
57
+ console . log ( "¿Contiene 'Elemento1'?" , contiene ) ;
58
+
59
+ // 8. Eliminar todo el contenido
60
+ conjunto . clear ( ) ;
61
+ console . log ( "Después de limpiar el conjunto:" , conjunto ) ;
62
+
63
+ console . log ( "\nPARTE 2: OPERACIONES EXTRA CON SETS" ) ;
64
+
65
+ // Creamos dos conjuntos para las operaciones
66
+ const conjunto1 = new Set ( [ 1 , 2 , 3 , 4 , 5 ] ) ;
67
+ const conjunto2 = new Set ( [ 4 , 5 , 6 , 7 , 8 ] ) ;
68
+
69
+ // 1. Unión
70
+ const union = new Set ( [ ...conjunto1 , ...conjunto2 ] ) ;
71
+ console . log ( "Unión:" , union ) ;
72
+
73
+ // 2. Intersección
74
+ const interseccion = new Set (
75
+ [ ...conjunto1 ] . filter ( x => conjunto2 . has ( x ) )
76
+ ) ;
77
+ console . log ( "Intersección:" , interseccion ) ;
78
+
79
+ // 3. Diferencia
80
+ const diferencia = new Set (
81
+ [ ...conjunto1 ] . filter ( x => ! conjunto2 . has ( x ) )
82
+ ) ;
83
+ console . log ( "Diferencia (conjunto1 - conjunto2):" , diferencia ) ;
84
+
85
+ // 4. Diferencia simétrica
86
+ const diferenciaSimetrica = new Set (
87
+ [ ...conjunto1 ] . filter ( x => ! conjunto2 . has ( x ) )
88
+ . concat ( [ ...conjunto2 ] . filter ( x => ! conjunto1 . has ( x ) ) )
89
+ ) ;
90
+ console . log ( "Diferencia simétrica:" , diferenciaSimetrica ) ;
91
+ }
92
+
93
+ // Funciones auxiliares útiles para trabajar con Sets
94
+ const utilidadesSets = {
95
+ // Unión de dos sets
96
+ union : ( setA , setB ) => new Set ( [ ...setA , ...setB ] ) ,
97
+
98
+ // Intersección de dos sets
99
+ interseccion : ( setA , setB ) =>
100
+ new Set ( [ ...setA ] . filter ( x => setB . has ( x ) ) ) ,
101
+
102
+ // Diferencia de dos sets
103
+ diferencia : ( setA , setB ) =>
104
+ new Set ( [ ...setA ] . filter ( x => ! setB . has ( x ) ) ) ,
105
+
106
+ // Diferencia simétrica de dos sets
107
+ diferenciaSimetrica : ( setA , setB ) =>
108
+ new Set ( [ ...setA ] . filter ( x => ! setB . has ( x ) )
109
+ . concat ( [ ...setB ] . filter ( x => ! setA . has ( x ) ) ) )
110
+ } ;
111
+
112
+ // Ejecutar la demostración
113
+ demostracionSets ( ) ;
0 commit comments