Skip to content

Commit 2f6baf9

Browse files
committed
03 - Typescript
1 parent 85582cd commit 2f6baf9

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
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+
//arrays
8+
const array:string[]=[];
9+
array.push('comienzo'); // operacion de insercion
10+
array[0] ='actualizacion';//operacion de actualizacion
11+
array.push('medio');
12+
array.push('final');
13+
array.push('error');
14+
array.pop()//operacion de borrado
15+
array.sort();//operacion de ordenamiento
16+
//tuplas
17+
const tupla: [number,string]=[0,'zero']// en la practica son para datos que no van a cambiar pero por alguna extraña razon todavia se puede usar push sobre tuplas y el editor no genera problema.
18+
tupla.push(1,'as')//operacion de agregacion
19+
tupla[0] = 999 //operacion de actualizacion
20+
tupla.pop()//operacion de borrado
21+
//--> todas las operaciones anteriores sobre la tupla no son recomendadas de hacer porque ese no es el sentido de la tupla pero se pueden hacer
22+
//enums
23+
const enum States{Incoming , Loading , Success}// no se pueden realizar operaciones de modificacion con esta estructura
24+
//Set
25+
let dontRepeatYourSelf = new Set([1,2,3,4]) // sobre esta estructura no se puede modificar directamente un valor ya introducido, ademas no permite datos repetidos.
26+
dontRepeatYourSelf.add(5) // agregacion
27+
dontRepeatYourSelf.delete(3)//borrado
28+
//ejemplo de como podria hacerse una operacion de 'ordenacion' sobre un set
29+
dontRepeatYourSelf = new Set([...dontRepeatYourSelf].sort((a,b)=>b-a))
30+
//mapas
31+
const map = new Map()
32+
map.set('clave','valor')//agregacion
33+
map.set('clave','actualizacion')//actualizacion
34+
map.delete('clave')//borrado
35+
//objetos
36+
const objeto: { [key: string]: any } = {};
37+
objeto.propiedadUno = "propiedad1"; //operaciones de agregacion
38+
objeto.propiedadDos = "propiedad2";
39+
delete objeto.propiedadUno;//operaciones de borrado
40+
objeto.propiedadDos = "actualizacion"; //operaciones de actualizacion
41+
42+
/* DIFICULTAD EXTRA (opcional):*/
43+
console.log(`
44+
Hola, bienvenido a tu agenda de contactos
45+
¿Que deseas realizar?
46+
1- Agregar contacto
47+
2- Actualizar contacto
48+
3- Eliminar contacto
49+
?- Buscar contacto
50+
Deja la respuesta vacia para salir de la agenda-->
51+
`);
52+
type Contacto = {
53+
nombre: string;
54+
numero: number;
55+
};
56+
type Agenda = {
57+
[key: string]: Contacto;
58+
};
59+
const agenda: Agenda = {};
60+
let opcion: string | null;
61+
do {
62+
let id: string | null;
63+
64+
let informacion: string | null;
65+
opcion = prompt(`
66+
1- Agregar contacto
67+
2- Actualizar contacto
68+
3- Eliminar contacto
69+
?- Buscar contacto
70+
Deja la respuesta vacia para salir de la agenda-->
71+
`);
72+
73+
switch (opcion) {
74+
case "1":
75+
informacion = prompt(
76+
"Introduce el nombre y el telefono separados por una coma para cada par de (nombre,telefono) campo(ej): juan perez,4612349178"
77+
);
78+
if (informacion) agregar(informacion);
79+
break;
80+
case "2":
81+
id = prompt(
82+
"Introduce el nombre o el telefono para actualizar los datos del contacto..."
83+
);
84+
informacion = prompt(
85+
"Introduce tus nuevos datos...(ej): juan perez,4612349178"
86+
);
87+
if (id && informacion) actualizar(id, informacion);
88+
break;
89+
case "3":
90+
id = prompt("Introduce el nombre o el telefono para borrar el contacto");
91+
if (id) eliminar(id);
92+
break;
93+
case "?":
94+
id = prompt("Introduce el nombre o el telefono para buscarlo:");
95+
if (id) buscar(id);
96+
break;
97+
default:
98+
console.log(`Saliendo de la aplicacion....`);
99+
break;
100+
}
101+
console.log(agenda)
102+
} while (opcion);
103+
104+
function agregar(datos: string) {
105+
const [nombre, numero] = datos.split(",");
106+
if (nombre && esUnNumeroValido(numero)) {
107+
const registro: Contacto = {
108+
nombre: nombre,
109+
numero: Number(numero),
110+
};
111+
agenda[window.crypto.randomUUID()] = registro;
112+
} else {
113+
error();
114+
}
115+
}
116+
function actualizar(id: string, contacto: string) {
117+
console.warn("Actualizando....");
118+
const [nombre, numero] = contacto.split(",");
119+
const res = Object.entries(agenda).find(
120+
([, contacto]) => contacto.nombre == id || contacto.numero == Number(id)
121+
);
122+
if (res && esUnNumeroValido(numero)) {
123+
const uuid = res![0];
124+
agenda[uuid].nombre = nombre;
125+
agenda[uuid].numero = Number(numero);
126+
console.log("Actualizado");
127+
}else{
128+
error();
129+
}
130+
131+
}
132+
function eliminar(id: string) {
133+
console.warn("Eliminando...");
134+
const uuid = buscar(id);
135+
const res = delete agenda[uuid]
136+
? "Contacto eliminado...."
137+
: "Perdona... quien?";
138+
console.log(res);
139+
}
140+
function buscar(id: string): string {
141+
let uuid = "";
142+
143+
const res = Object.entries(agenda).find(
144+
([, contacto]) => contacto.nombre == id || contacto.numero == Number(id)
145+
);
146+
147+
if (res) {
148+
uuid = res[0];
149+
console.log(`
150+
Vaya! a quien tenemos aqui?.....
151+
${res}
152+
`);
153+
alert(`
154+
Vaya! a quien tenemos aqui?.....
155+
${JSON.stringify(res)}
156+
`);
157+
} else {
158+
error()
159+
}
160+
161+
return uuid;
162+
}
163+
function esUnNumeroValido(numero: string): boolean {
164+
return !isNaN(Number(numero)) && numero.length < 11;
165+
}
166+
167+
function error(){
168+
console.warn(
169+
"ups....algo salio mal.Revisa si tus datos son registrado correctamente, no se admiten numeros de mas de 11 digitos"
170+
);
171+
alert(
172+
"ups....algo salio mal.Revisa si tus datos son registrado correctamente, no se admiten numeros de mas de 11 digitos"
173+
);
174+
}

0 commit comments

Comments
 (0)