1+ /*
2+ * EJERCICIO:
3+ * - Muestra ejemplos de creación de todas las estructuras soportadas por defecto
4+ * en tu lenguaje.
5+ * - Utiliza operaciones de inserción, borrado, actualización y ordenación.
6+ *
7+ * DIFICULTAD EXTRA (opcional):
8+ * Crea una agenda de contactos por terminal.
9+ * - Debes implementar funcionalidades de búsqueda, inserción, actualización
10+ * y eliminación de contactos.
11+ * - Cada contacto debe tener un nombre y un número de teléfono.
12+ * - El programa solicita en primer lugar cuál es la operación que se quiere realizar,
13+ * y a continuación los datos necesarios para llevarla a cabo.
14+ * - El programa no puede dejar introducir números de teléfono no númericos y con más
15+ * de 11 dígitos (o el número de dígitos que quieras).
16+ * - También se debe proponer una operación de finalización del programa.
17+ */
18+
19+
20+ console . log ( '--------------ESTRUCTURAS DE DATOS----------------' ) ;
21+ console . log ( '---------------------ARRAY------------------------' ) ;
22+
23+ const arr = [ 1 , 2 , 3 ] ;
24+ console . log ( 'array: ' , arr ) ;
25+ arr . push ( 4 ) ;
26+ console . log ( 'Inserción en el array de un 4. Resultado: ' , arr ) ;
27+ arr . pop ( ) ;
28+ console . log ( 'Borrado en el array' , arr ) ;
29+ arr . shift ( ) ;
30+ console . log ( 'Borrado del primer elemento en el array' , arr ) ;
31+
32+ let arrDesordenado = [ 2 , 1 , 0 ]
33+ console . log ( 'array desordenando' , arrDesordenado ) ;
34+ arrDesordenado . sort ( )
35+ console . log ( 'array ordenado' , arrDesordenado ) ;
36+
37+ arrDesordenado [ 0 ] = 10 ;
38+ console . log ( 'actualizamos array desordenado' , arrDesordenado ) ;
39+
40+ console . log ( '---------------------SET------------------------' ) ;
41+ // Los sets solo permiten datos únicos, no puede haber dos elementos repetidos
42+ const miSet = new Set ( [ 1 , 2 , 3 ] )
43+ console . log ( 'mi set es' , miSet ) ;
44+ miSet . add ( 4 ) ;
45+ console . log ( '.add() añade un elemento a mi' , miSet ) ;
46+ miSet . delete ( 3 ) ;
47+ console . log ( 'borrando el elemento 3' , miSet ) ;
48+ console . log ( 'el set tiene el elemento 4?' , miSet . has ( 4 ) ) ;
49+ miSet . clear ( ) ;
50+ console . log ( 'hacemos un clear del set' , miSet ) ;
51+
52+
53+ console . log ( '---------------------WEAKSET------------------------' ) ;
54+ const obj1 = { nombre : 'obj1' } ;
55+ const obj2 = { nombre : 'obj2' } ;
56+ const obj3 = { nombre : 'obj3' } ;
57+
58+ const miWeakSet = new WeakSet ( ) ;
59+ miWeakSet . add ( obj1 ) ;
60+ miWeakSet . add ( obj2 ) ;
61+ console . log ( 'my weak set' , miWeakSet ) ;
62+ miWeakSet . add ( obj3 ) ;
63+ console . log ( 'add obj3' , miWeakSet ) ;
64+ miWeakSet . delete ( obj2 ) ;
65+ console . log ( 'delete 3' , miWeakSet ) ;
66+ console . log ( 'my weak set has obj1?' , miWeakSet . has ( obj1 ) ) ;
67+
68+
69+ console . log ( '---------------------WEAKMAP------------------------' ) ;
70+ let weakMap = new WeakMap ( ) ;
71+ let key1 = { } ;
72+ let key2 = { } ;
73+
74+ weakMap . set ( key1 , "value1" ) ;
75+ weakMap . set ( key2 , "value2" )
76+
77+ weakMap . delete ( key1 ) ;
78+
79+ weakMap . set ( key2 , "newValue2" ) ;
80+ console . log ( weakMap ) ;
81+
82+ console . log ( '---------------------OBJETO------------------------' ) ;
83+ const persona = {
84+ nombre : 'Caterina' ,
85+ edad : 24 ,
86+ genero : 'f'
87+ }
88+
89+ persona . edad = 25 ;
90+ console . log ( persona ) ;
91+
92+ delete persona . genero ;
93+ console . log ( persona ) ;
94+
95+ const sortedKeys = Object . keys ( persona ) . sort ( ) ;
96+
97+ let sortedObj = { } ;
98+ sortedKeys . map ( key =>
99+ sortedObj [ key ] = persona [ key ]
100+ )
101+ console . log ( 'objeto ordenado' , sortedObj ) ;
102+
103+ console . log ( '---------------------MAP------------------------' ) ; let map = new Map ( [
104+ [ "nombre" , "Caterina" ] ,
105+ [ "edad" , 22 ] ,
106+ [ "genero" , "f" ]
107+ ] ) ;
108+
109+ map . set ( "casa" , "Mallorca" ) ;
110+
111+ map . delete ( "genero" ) ;
112+ console . log ( map ) ;
113+
114+ let sortedMapArray = [ ...map . entries ( ) ] . sort ( ) ;
115+ let sortedMap = new Map ( sortedMapArray ) ;
116+ console . log ( sortedMap ) ;
117+
118+ console . log ( '--------------------EJERCICIO EXTRA------------------' ) ;
119+
120+
121+ /* DIFICULTAD EXTRA (opcional):
122+ * Crea una agenda de contactos por terminal.
123+ * - Debes implementar funcionalidades de búsqueda, inserción, actualización
124+ * y eliminación de contactos.
125+ * - Cada contacto debe tener un nombre y un número de teléfono.
126+ * - El programa solicita en primer lugar cuál es la operación que se quiere realizar,
127+ * y a continuación los datos necesarios para llevarla a cabo.
128+ * - El programa no puede dejar introducir números de teléfono no númericos y con más
129+ * de 11 dígitos (o el número de dígitos que quieras).
130+ * - También se debe proponer una operación de finalización del programa.
131+ */
132+ const readline = require ( 'readline' ) ;
133+ const rl = readline . createInterface ( process . stdin , process . stdout ) ;
134+
135+ let contacts = [ ] ;
136+
137+ const menu = ( ) => {
138+ console . log ( `
139+ ------------------
140+ 1. Añadir contacto
141+ 2. Borrar contacto
142+ 3. Opción sorpresa
143+ 4. Ver contactos
144+ -----------------
145+
146+ ` ) ;
147+ rl . question ( 'Elije mortal :) -> ' , chooseOption )
148+ } ;
149+
150+ const chooseOption = ( option ) => {
151+ switch ( option ) {
152+ case '1' :
153+ addContact ( ) ;
154+ break ;
155+ case '2' :
156+ deleteContact ( ) ;
157+ break ;
158+ case '3' :
159+ console . log ( 'testim Grace, princeseta' ) ;
160+ case '4' :
161+ listContacts ( ) ;
162+ break ;
163+ default :
164+ menu ( ) ;
165+ }
166+ }
167+
168+ const addContact = ( ) => {
169+ rl . question ( 'Nombre pls -> ' , ( name ) => addContactTelephone ( name ) )
170+ }
171+
172+ const addContactTelephone = ( name ) => {
173+ rl . question ( 'Teléfono porfa pls -> ' , ( tlf ) => {
174+ if ( tlf . length > 11 ) {
175+ console . log ( 'El teléfono no puede ser mayor a 11 dígitos' ) ;
176+ addContactTelephone ( ) ;
177+ } else if ( ! ( / ^ \d { 1 , 11 } $ / . test ( tlf ) ) ) {
178+ console . log ( 'El teléfono solo puede incluir dígitos numéricos' ) ;
179+ addContact ( ) ;
180+ } else {
181+ contacts . push ( { nombre : name , telefono : tlf } )
182+ console . log ( 'siuuuu, contacto añadido' ) ;
183+ listContacts ( ) ;
184+ }
185+ } )
186+ }
187+
188+ const listContacts = ( ) => {
189+ console . log ( ' ' ) ;
190+ console . log ( '------------------' ) ;
191+ console . log ( ' ' ) ;
192+ console . log ( 'TUS CONTACTOS, REINA:' ) ;
193+ console . log ( ' ' ) ;
194+ contacts . map ( contact => console . log ( `Nombre: ${ contact . nombre } - Teléfono: ${ contact . telefono } ` ) )
195+ menu ( ) ;
196+ }
197+
198+ const deleteContact = ( ) => {
199+ rl . question ( 'A quien hacemos la cruz? -> ' , ( contact ) => {
200+ contacts = contacts . filter ( contact => contact . nombre === contact ) ;
201+ console . log ( 'eliminao >:)' ) ;
202+ menu ( ) ;
203+ } ) ;
204+ menu ( )
205+ }
206+
207+ menu ( ) ;
0 commit comments