Este repositorio contiene todas las soluciones que he desarrollado para los playground del #PlatziChallenge "Aprende JavaScript en 30 días" entre Marzo-Abril 2023, con el objetivo de mejorar mis habilidades en JavaScript a través de una serie de ejercicios que abarcaron desde temas básicos hasta avanzados.
Día | (num) Nombre | Consigna | Temas | Archivo.js |
---|---|---|---|---|
1 | 1. Retorna el tipo | Encontrar el tipo de dato del parámetro "valor" de una function "solution". | Variables y Funciones / Tipos de datos numbers, strings, object, booleanos | 1-retorna_tipo.js |
2 | 2. Calcula la propina | Calcular la propina que deben dejar los clientes de un restaurante de acuerdo a su consumo. | Operadores aritméticos, lógicos, de asignación y comparación. | 2-calcula_propina.js |
3 | 3. Calcula años bisiestos | Crear lógica de una función para determinar si un año es bisiesto o no. | Condicional if-else | 3-anio_bisiesto.js |
4. Ejercicio de mascotas | Retornar información específica de cuánto ejercicio necesita hacer las mascotas perro, gato y ave, de acuerdo a su edad. | Condicional Switch / Condicional if-else / condicional ternario | 4-mascotas_ejercicio.js | |
Solución alternativa: 4-mascotas_ejercicio_alt.js | ||||
5. Dibuja un triángulo | Dibujar un triángulo isósceles alineado a la derecha usando bucles. | Ciclo For / for-in y for-of / ciclo while / ciclo do-while / .repeat() | 5-dibuja_triangulo.js | |
Solución alternativa: 5-dibuja_triangulo_alt.js | ||||
4 | 6. Encuentra el michi más famoso | Filtrar de un array de objetos con nombres de gatos y followers en social media, los gatos con el mayor número de seguidores y devolverlos en forma de array. | Arrays y objetos / Métodos push, reduce, pop, map. | 6-gatitos_famosos.js |
7. Obtén el promedio de los estudiantes | Calcular el promedio general de una clase y el promedio individual de cada estudiante a través de un array de estudiantes con su nombre y notas. | Manipulación de objetos y arrays / toFixed() | 7-promedio_estudiantes.js | |
5 | Checkpoint 1: Encuentra el mayor palíndromo | Encontrar el palíndromo más largo de un array de palabras. (una palabra que se lee de la misma forma tanto hacia adelante como hacia atrás) | Métodos de manipulación de array, .split, .reverse, .join | checkpoint-1.js |
6 | Teoría | - | Reasignación y Redeclaración, "use strict" | - |
7 | Teoría | - | Debugging con try-catch y debugger; / Programación funcional | - |
8 | 8. Crea una calculadora con closures | Crea una calculadora con los métodos add (suma), subtract(resta), multiply (multiplicación), divide (división), clear (reinicia a 0) y getTotal (devuelve el total actual). | Clousures & Scope, programación funcional | 8-calculadora.js |
9. Crea tu propio método map | Desarrolla una implementación personalizada del método map utilizando funciones de orden superior. | Higher order functions | 9-map.js | |
9 | Teoría | - | ECMAScript y TC39 | - |
10 | Checkpoint 2: Crea un planificador de tareas | Que permita mostrar un registro, agregar, eliminar y marcar completas las tareas, con una función closure createTaskPlanner. Métodos: addTask(task), removeTask(value), getTasks(), getPendingTasks(), getCompletedTasks(), markTaskAsCompleted(value), getSortedTasksByPriority(), filterTaskByTag(), updateTask(taskId, updates). | Closures y Scope, métodos de manipulación de arrays: push, findIndex, filter, etc., spread operator | checkpoint-2.js |
11 | 10. Crea una promesa para mandar emails | Implementa la lógica para que, usando promesas, envíe el correo después de 2 segundos; en caso de que hayan campos faltantes, lanza un error. | Asincronismo, promesas | 10-enviar_email.js |
11. Evita el callback hell haciendo uso de promises | Un código base con mala práctica de callback hell que debes solucionar usando promesas (sin async/await). | Promises, callback hell | 11-callbackhell_promesas.js | |
12. Evita el callback hell haciendo uso de await | Un código base con mala práctica de callback hell que debes solucionar usando async/await. | async/await, callback hell | 12-callbackhell_async_await.js | |
12 | 13. Valida un formulario de registro de usuario | Tomando en cuenta que todos los campos estén completos y que el email no exista ya en la lista de usuarios registrados; si todo está correcto, agrega al usuario con todos sus datos excepto contraseña y retorna un mensaje de registro exitoso con el nombre y apellido. | Arrays y métodos como push, filter, some, map, find, join, etc. | 13-validar_form.js |
13 | 14. Agrupa los productos | Agrupa una lista de productos según su categoría, retornando un array con los nombres y un totalPrice con la suma total de los precios. | Objetos y arrays, métodos como includes, join, etc. | 14-agrupar_productos.js |
15. Encuentra la ubicación del valor buscado | Encuentra un valor en un array de dos dimensiones, retornando la posición del valor según row y column. | Manipulación de arrays bidimensionales, métodos como flat y flatMap. | 15-encuentra_ubicacion.js | |
14 | 16. Modifica una lista de compras | Procesa una lista de compras modificando el array original donde si el nombre del producto incluye "oferta" aplica descuento del 20%, multiplica el precio del producto por su cantidad, y retorna el precio final de toda la compra. | Manipulación de objetos y arrays, mutable functions. | 16-modifica_shoppinglist.js |
17. Ordena los productos | Ordena una lista de productos (devolviendo una copia) con métodos de ordenamiento para que los disponibles en el inventario sean colocados al principio de la lista y luego sean ordenados por su precio de manera ascendente. | Mutable functions, método sort | 17-ordena_productos.js | |
15 | Checkpoint 3: Sistema de reservaciones de un hotel | Utiliza closures para un crear administrador de habitaciones de un hotel. Funciones: searchReservation(id), getSortReservations(), addReservation(reservation), removeReservation(id), getReservations(), getAvailableRooms(checkIn, checkOut). Formato de reservaciones: { id, name, checkIn, checkOut, roomNumber} | Closures, manipulación de array y objetos | checkpoint-3.js |
16 | 18. Congela el objeto recursivamente | Crea una copia congelada de un objeto-perro para evitar cambios en sus propiedades (incluyendo objetos anidados). | Programación Orientada a Objetos, o Object.assign y Object.freeze, objetos literales. | 18-congela_objeto.js |
17 | 19. Modifica el prototype de los arrays | Crea tu propia implementación de filter para el prototype de arrays. | Prototipos en JavaScript, Array.prototype, callbacks, filter | 19-modifica_array_prototype.js |
20. Crea un auto usando clases | Con los atributos brand, model, year, mileage, y state (apagado/encendido) y los métodos turnOn(), turnOff() y drive(kilometers). | Programación Orientada a Objetos, atributos y métodos de clase | 20-auto.js | |
18 | 21. Sistema de carrito de compras | Creando clases Article y Service hijas de Product, Article implementará un addToCart() con nombre y cantidad de artículos, y Service el mismo pero solo con nombre. Finalmente una clase Cart implementará métodos addProduct(product), deleteProduct(product), calculateTotal(), getProducts() | POO, herencia, abstracción | 21-carrito_compras.js |
22. Encapsula datos de los usuarios | Protege los datos privados de una clase Usuario (name, age, friends, messages), con métodos públicos addFriend(friend), sendMessage(message, friend), showMessage. Incluye getters y setters de name y age | POO, encapsulamiento, getters y setters | 22-encapsula_usuario.js | |
19 | 23. Jerarquía de animales | Crea una jerarquía con las clases Animal (name, age, species, getInfo()), luego Mammal (hasFur(), getInfo()) y luego Dog (breed, getInfo(), bark()). | POO, herencia | 23-jerarquia_animales.js |
24. Sistema de pagos | Implementa un sistema de pagos utilizando polimorfismo, con clases Pay (makePay(quantity)), PayPal (makePlay + platform e email), Card (nro de tarjeta 16 dígitos + lastCardNumbers) y Cash. Añade función processPay que recibe un método de pago y cantidad llamando a makePay. | POO, polimorfismo | 24-sistema_pagos.js | |
20 | Checkpoint 4: Agenda de vuelos | Crea un sistema de reservaciones de vuelos con clases: Passenger (name, lastName, age y array de flights), Reservation (con un objeto Flight y Passenger y método reservationDetails()), y Flight (origin, destination, date, capacity, price, y array passengers, y método sellTicket(passenger) con validación de vacantes) con sus subclases PremiumFlight (+ propiedad que suma costo adicional al precio) y Economic Flight (descuento 20% para -18 o +65 años) | Programación Orientada a Objetos: polimorfismo, abstracción, herencia, encapsulamiento. | checkpoint-4.js |
21 | 25. Implementa Singleton en un chat | Aplica Singleton en una clase Chat con los métodos sendMessage(message), addUser(user), removeUser(name). | Patrones de diseño de software (teoría), patrón Singleton | 25-singleton_chat.js |
22 | 26. Personaliza productos de una tienda | Usa el patrón decorator para personalizar la compra de un Product (price y descripción) con las clases BasicProduct (+ retorno nombre con getDescription()) , WarrantyDecorator (+ 20$ al precio y string “con garantía” en la descripción), y ShippingInsuranceDecorator (20$ al precio y string “con seguro de envío” en la descripción). | Patrones de diseño de software (teoría), patrón Decorator | 26-decorator_personalizar_producto.js |
27. Construye un auto usando Builder pattern | Mejorando la legibilidad de su creación al tener múltiples atributos. | Patrones de diseño de software (teoría), Builder Pattern | 27-builder_auto.js | |
23 | 28. | |||
29. | ||||
24 | Checkpoint 5: | |||
25 | 30. | |||
31. | ||||
26 | 32. | |||
33. | ||||
27 | 34. | |||
35. | ||||
28 | 36. | |||
29 | 37. |