Skip to content

Commit 0041531

Browse files
authored
Merge pull request mouredev#6972 from h4ckxel/03road
#3 - Javascript
2 parents b142119 + cfe78a4 commit 0041531

File tree

1 file changed

+253
-0
lines changed
  • Roadmap/03 - ESTRUCTURAS DE DATOS/javascript

1 file changed

+253
-0
lines changed
Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
// #03 ESTRUCTURAS DE DATOS
2+
3+
/**
4+
* - Muestra ejemplos de creación de todas las estructuras soportadas por defecto en tu lenguaje.
5+
* - Utiliza operaciones de inserción, borrado, actualización y ordenación.
6+
*/
7+
8+
// 1. Arrays (Coleccion de datos)
9+
const pLanguages = ['javascript', 'python', 'c#'];
10+
// inserción
11+
pLanguages.unshift('java'); // insercion al principio del array
12+
pLanguages.push('kotlin'); // insercion al final del array
13+
pLanguages[5] = 'php'; // insercion en una posicion especificada del array
14+
pLanguages.length; // -> 6
15+
console.log(pLanguages); // -> ['java', 'javascript', 'python', 'c#', 'kotlin', 'php']
16+
// borrado
17+
pLanguages.shift(); // borra el primer elemento del array
18+
pLanguages.pop(); // borra el ultimo elemento del array
19+
pLanguages.length; // -> 4
20+
delete pLanguages[2]; // borra el elemento en una posicion especificada pero mantiene el espacio vacío
21+
pLanguages.length; // -> 4
22+
console.log(pLanguages); // -> ['javascript', 'python', 'empty', 'kotlin']
23+
// actualización
24+
pLanguages[2] = 'c++'; // actualiza el elemento en una posicion especificada
25+
console.log(pLanguages); // -> ['javascript', 'python', 'c++', 'kotlin']
26+
// ordenación
27+
pLanguages.sort(); // ordena el array de menor a mayor por defecto (alfabeticamente)
28+
console.log(pLanguages); // -> ['c++', 'javascript', 'kotlin', 'python']
29+
pLanguages.reverse(); // invierte el orden del array
30+
console.log(pLanguages); // -> ['python', 'kotlin', 'javascript', 'c++']
31+
32+
// 2. Objects (Colecciones de pares clave-valor)
33+
const languages = {
34+
javascript: '1995',
35+
python: '1991',
36+
c: '1972',
37+
};
38+
// inserción y actualización
39+
languages.java = '995';
40+
languages['kotlin'] = '2011';
41+
Object.defineProperty(languages, 'php', {
42+
value: '1995',
43+
writable: true,
44+
enumerable: true,
45+
configurable: true,
46+
});
47+
console.log(languages); // -> {javascript: '995', python: '1991', c: '1972', java: '1995', kotlin: '2011', php: '1995'}
48+
languages.java = '1995'; // actualiza la propiedad java
49+
console.log(languages); // -> {javascript: '1995', python: '1991', c: '1972', java: '1995', kotlin: '2011', php: '1995'}
50+
// borrado
51+
delete languages.c; // borra la propiedad c y su valor del objeto languages
52+
53+
// 3. Set (Colecciones de valores unicos (no duplicados))
54+
const numbers = new Set([0]);
55+
// inserción
56+
numbers.add(1);
57+
numbers.add(2);
58+
numbers.add(3);
59+
numbers.add(1); // este no ingresa al array por ser duplicado
60+
numbers.size; // -> 4
61+
numbers.has(0); // -> true
62+
numbers.has(5); // -> false
63+
console.log(numbers); // -> {0, 1, 2, 3}
64+
// borrado
65+
numbers.delete(0);
66+
numbers.size; // -> 3
67+
console.log(numbers); // -> {1, 2, 3}
68+
69+
// 4. Map (Coleccion asociativa de datos)
70+
const numbersMap = new Map([['zero', 0]]);
71+
// inserción
72+
numbersMap.set('one', 1);
73+
numbersMap.set('two', 2);
74+
numbersMap.set('three', 3);
75+
numbersMap.size; // -> 4
76+
console.log(numbersMap); // -> {zero: 0, one: 1, two: 2, three: 3}
77+
// actualización
78+
numbersMap.set('zero', 'cero');
79+
numbersMap.set('one', 'uno');
80+
numbersMap.set('two', 'dos');
81+
numbersMap.set('three', 'tres');
82+
console.log(numbersMap); // -> {zero: 'cero', one: 'uno', two: 'dos', three: 'tres'}
83+
// borrado
84+
numbersMap.delete('zero');
85+
numbersMap.size; // -> 3
86+
console.log(numbersMap); // -> {one: 'uno', two: 'dos', three: 'tres'}
87+
88+
/** DIFICULTAD EXTRA (opcional):
89+
* Crea una agenda de contactos por terminal.
90+
* - Debes implementar funcionalidades de búsqueda, inserción, actualización y eliminación de contactos.
91+
* - Cada contacto debe tener un nombre y un número de teléfono.
92+
* - El programa solicita en primer lugar cuál es la operación que se quiere realizar, y a continuación
93+
* los datos necesarios para llevarla a cabo.
94+
* - El programa no puede dejar introducir números de teléfono no númericos y con más de 11 dígitos.
95+
* (o el número de dígitos que quieras)
96+
* - También se debe proponer una operación de finalización del programa.
97+
*/
98+
99+
/**
100+
* Use el entorno nodejs para poder programar la agenda del
101+
* ejercicio extra.
102+
* */
103+
import { createInterface } from 'readline';
104+
105+
const rl = createInterface({
106+
input: process.stdin,
107+
output: process.stdout,
108+
});
109+
110+
const contacts = {
111+
Test: {
112+
name: 'Test Name',
113+
phone: '3012456789',
114+
},
115+
};
116+
117+
const regex = /^[0-9]{10}$/; // 10 digitos - solo numeros
118+
119+
main();
120+
121+
function main() {
122+
console.log('\nWelcome to Contacts.\n');
123+
124+
console.log(' 0. All Contacts');
125+
console.log(' 1. Search');
126+
console.log(' 2. Add');
127+
console.log(' 3. Update');
128+
console.log(' 4. Delete');
129+
console.log(' 5. Exit');
130+
131+
rl.question('\nChoose an option: ', (action) => {
132+
functionSet(action);
133+
});
134+
}
135+
136+
function backToMain() {
137+
rl.question('\nPress enter to back to menu', () => {
138+
console.clear();
139+
main();
140+
});
141+
}
142+
143+
function validatePhone(phone) {
144+
return regex.test(phone);
145+
}
146+
147+
function functionSet(action) {
148+
if (action === '0') {
149+
showContacts(contacts);
150+
} else if (action === '1') {
151+
console.log('\n==Search Contact==\n');
152+
rl.question('Enter the contact nick: ', (nick) => {
153+
searchContact(contacts, nick);
154+
});
155+
} else if (action === '2') {
156+
console.log('\n==Add a Contact==\n');
157+
rl.question('Enter the contact nick: ', (nick) => {
158+
rl.question('Enter the contact name: ', (name) => {
159+
rl.question('Enter the contact phone: ', (phone) => {
160+
addContact(contacts, nick, name, phone);
161+
});
162+
});
163+
});
164+
} else if (action === '3') {
165+
console.log('\n==Update Contact==\n');
166+
rl.question('Enter the contact nick: ', (nick) => {
167+
rl.question('Enter the contact name: ', (name) => {
168+
rl.question('Enter the contact phone: ', (phone) => {
169+
updateContact(contacts, nick, name, phone);
170+
});
171+
});
172+
});
173+
} else if (action === '4') {
174+
console.log('\n==Delete Contact==\n');
175+
rl.question('Enter the contact nick: ', (nick) => {
176+
deleteContact(contacts, nick);
177+
});
178+
} else if (action === '5') {
179+
exitContacts();
180+
} else {
181+
console.log('Invalid option. Select an option from 0 to 5');
182+
setTimeout(() => {
183+
console.clear();
184+
main();
185+
}, 2000);
186+
}
187+
}
188+
189+
function showContacts(obj) {
190+
console.log('\nHere are your contacts:\n');
191+
if (Object.keys(obj).length === 0) {
192+
console.log('No contacts... list is empty.');
193+
} else {
194+
for (const contact in obj) {
195+
console.log(`${contact}: ${obj[contact].name} - ${obj[contact].phone}`);
196+
}
197+
}
198+
backToMain();
199+
}
200+
201+
function searchContact(obj, nick) {
202+
const search = obj.hasOwnProperty(nick);
203+
if (search) {
204+
console.log(`${obj[nick].name} - ${obj[nick].phone}`);
205+
} else {
206+
console.log(`Contact ${nick} does not exist`);
207+
}
208+
backToMain();
209+
}
210+
211+
function addContact(obj, nick, name, phone) {
212+
if (obj.hasOwnProperty(nick)) {
213+
console.log(`Contact ${nick} already exist`);
214+
backToMain();
215+
} else if (validatePhone(phone)) {
216+
obj[nick] = { name, phone };
217+
console.log(`Contact ${nick} successfully added`);
218+
} else {
219+
console.log('Invalid phone number. Phone must have 10 digits');
220+
}
221+
backToMain();
222+
}
223+
224+
function updateContact(obj, nick, name, phone) {
225+
if (obj.hasOwnProperty(nick) && validatePhone(phone)) {
226+
obj[nick].name = name;
227+
obj[nick].phone = phone;
228+
console.log(`Contact ${nick} successfully updated`);
229+
} else {
230+
console.log(
231+
`Contact ${nick} does not exist or you input an invalid phone number. Phone must have 10 digits`
232+
);
233+
}
234+
backToMain();
235+
}
236+
237+
function deleteContact(obj, nick) {
238+
if (obj.hasOwnProperty(nick)) {
239+
delete obj[nick];
240+
console.log(`Contact ${nick} successfully deleted`);
241+
} else {
242+
console.log(`Contact ${nick} does not exist`);
243+
}
244+
backToMain();
245+
}
246+
247+
function exitContacts() {
248+
console.log('Exiting Contacts!');
249+
setTimeout(() => {
250+
console.clear();
251+
process.exit();
252+
}, 1000);
253+
}

0 commit comments

Comments
 (0)