> Proyectos KeepCoding - Web 18: 📁 repos-kc-web-18.md
> Selecciona tu Idioma: Inglés 🔄 Alemán
Este proyecto tiene por objetivo ejercitar y demostrar los conocimientos adquiridos en las clases virtuales, aplicando conceptos básicos de JavaScript como introducción a la programación web. No está permitido utilizar librerías o frameworks externos de JavaScript o CSS; todo debe resolverse empleando únicamente JavaScript “puro” (vanilla JS). De este modo, cada ejercicio refleja fielmente lo visto en clase y facilita una introducción práctica a la programación web.
En este repositorio encontrarás la práctica correspondiente a la unidad “Introducción a JavaScript”. Contiene seis ejercicios que cubren:
- Strings, Arrays, Objetos y sus atributos.
- Manejo de sincronía y desestructuración.
- Creación y utilización de funciones.
- Métodos de arreglo como
.map,.findy.filter. - Un pequeño conjunto de pruebas (testing) al final del ejercicio 06.
Cada ejercicio debe resolverse sin depender de ninguna librería o framework externo, para reforzar el entendimiento de la sintaxis y las técnicas propias de JavaScript.
| Categoría | Subtemas / Detalles |
|---|---|
| Introducción a JavaScript | – |
| Sintaxis y Variables | Escritura básica de un archivo; Palabras reservadas; Comentarios; Declaración de variables (let, const, var); Punto y coma |
| Tipos de Datos | Primitivos; Número (42, 3.14159); Cadena ("Howdy"); Booleano (true, false); null; undefined; BigInt (9007199254740992n); Objeto; Valores distintos de cero, 0, null y undefined |
| Operadores | typeof; Operadores de asignación; Operadores aritméticos; Operadores de comparación; Operadores de cadena; Operadores lógicos; Operador coma |
| Sentencias de Control y Bloques | – |
Expresiones Condicionales (if…else) |
– |
| Bloques | – |
| Hoisting | – |
switch |
– |
| Operador Ternario | – |
| Valores “Truthy” | Números distintos de 0; Cadenas distintas de ""; Objetos; Funciones |
| Valores “Falsy” | false; 0; "" o ''; null; undefined; NaN |
| Cadenas y Arreglos | Métodos de cadena: trim(), toLowerCase(), includes(), replace(), parsing; Manejo de errores; Métodos de arreglos; Arreglos bidimensionales |
| Funciones | Declaración de función; Funciones flecha; Llamada a funciones; Ámbito (scope); Cierres (closures); Parámetros predeterminados; Parámetros rest |
| Bucles | for; while; break y continue; for…in |
| Objetos | Creación de objetos; Acceso a propiedades; Modificación de propiedades; Adición de propiedades; Eliminación de propiedades; Iteración con for…in |
| Mutabilidad | Objetos y arreglos mutables; Operador spread (...); Desestructuración (destructuring); Problemas de referencia |
| Programación Funcional | Funciones callback; forEach; map; filter; reduce |
| Asincronía | Callbacks asíncronos; Promesas (Promise); async / await |
| Temas Adicionales | Fechas (Date); Expresiones regulares (RegEx); Módulos (ES Modules) |
- Los enunciados de los ejercicios y el codigo mostrado han sido creados por el docente Kevin Martínez.
- No se permite el uso de librerías. Todo el código tiene que ser creado por el alumno.
- No es necesario crear un HTML para cada solución.
- Crear un archivo
ejercicio1.jsque tenga un objeto llamadousuariocon los siguientes campos:- Nombre (real o inventado)
- Apellidos (reales o inventados)
- Una lista con los temas del bootcamp Node.js, Git y React, cada uno con:
- Nombre del módulo
- Fecha de inicio en formato
YYYY-MM-DD
- Estado de “búsqueda activa” (valor booleano:
trueofalse)
- En este archivo, mostrar por pantalla la fecha de inicio del módulo de React del objeto
usuario.
- El cliente intenta calcular el promedio de una lista de números, pero el código en producción no funciona.
- No se proporciona el error, solo el código que está usando el cliente.
- Crear un archivo
bug.jscon la solución que corrija el cálculo del promedio.
// exercise2.js
const calcularPromedio = (numeros) => {
let sumaTotal = 0;
for (let i = 0; i <= numeros.length; i++) {
sumaTotal += numeros[i];
}
const promedio = sumaTotal / numeros.length;
return promedio;
};
const listaNumeros = [1, 2, 3, 4, 5];
const promedioNumeros = calcularPromedio(listaNumeros);-
No hay enunciado: hay que deducir qué se espera según los datos de entrada y los resultados.
Ejercicio 3.1 : Crear una función que, con los datos de entrada proporcionados (no mostrados aquí), produzca los resultados esperados.
// exercise3.1.js const input1 = ["Downloads", "Videos", "capture", "mp4"]; // create your function here yourFunction(input1); // 'Downloads/Videos/capture.mp4' const input2 = ["CodinGame", "python", "py"]; yourFunction(input2); // 'CodinGame/python.py' const input3 = ["programming", "languages", "easy", "beginner", "useful", "pythonstuff", "py"]; yourFunction(input3); // 'programming/languages/easy/beginner/useful/pythonstuff.py'
Ejercicio 3.2 : Crear una función que, con los datos de entrada proporcionados, produzca los resultados esperados.
// exercise3.2.js // create your function here yourFunction(input); // '1-0' const secondInput = 1; yourFunction(input); // '1' const thirdInput = 11234; yourFunction(input); // '1-1-2-3-4'
Ejercicio 3.3 : Crear una función que, con los datos de entrada proporcionados, produzca los resultados esperados.
// exercise3.3.js // create your function here const input1 = "string"; // create your function here yourFunction(input); // '6 gnirts' const input2 = "variable"; yourFunction(input); // '8 elbairav' const input3 = "pointer"; yourFunction(input); // '7 retniop'
-
El cliente tiene un array de datos y necesita:
- El listado de los desarrolladores cuya habilidad incluya
"JavaScript". - El listado de los proyectos en los que sus desarrolladores trabajan.
- El listado de los desarrolladores cuya habilidad incluya
-
Crear un archivo
transform.jsque contenga dos funciones que retornen esos valores. -
No usar
forniwhile; se trata de practicar el uso demapyfilter.// exercise4.js const datos = [ { id: 1, nombre: "Juan", habilidades: ["JavaScript", "HTML", "CSS"], proyectos: [ { id: 1, nombre: "Proyecto 1" }, { id: 2, nombre: "Proyecto 2" }, ], }, { id: 2, nombre: "María", habilidades: ["Python", "SQL", "Django"], proyectos: [ { id: 3, nombre: "Proyecto 3" }, { id: 4, nombre: "Proyecto 4" }, ], }, { id: 3, nombre: "Pedro", habilidades: ["Java", "Spring", "Hibernate"], proyectos: [ { id: 5, nombre: "Proyecto 5" }, { id: 6, nombre: "Proyecto 6" }, ], }, ];
// exercise4.js /_ desarrolladoresJavascript _/ [ { "id": 1, "nombre": "Juan", "habilidades": ["JavaScript", "HTML", "CSS"], "proyectos": [ { "id": 1, "nombre": "Proyecto 1"}, { "id": 2, "nombre": "Proyecto 2" } ] } ] /_ nombresProyectos _/ ['Proyecto 1', 'Proyecto 2', 'Proyecto 3', 'Proyecto 4', 'Proyecto 5','Proyecto 6']
-
Existe un error: al pedir un usuario con ID 1, siempre devuelve
undefined. -
Se proporciona el código a revisar y arreglar.
-
Crear un archivo
bugAsync.jscon la solución que corrija la llamada asíncrona.// exercise5.js // Este programa simula una llamada asincrónica para obtener un usuario function obtenerUsuario(id) { let usuario; setTimeout(() => { if (id === 1) { usuario = { id: 1, nombre: "John Doe" }; } }, 2000); return usuario; } const usuario = obtenerUsuario(1); console.log(usuario);
- El cliente ya creó la maquetación y parte de la lógica de formularios e interacciones (ordenar, marcar como favorito, borrar), pero necesita ayuda para manejar el estado y la lógica completa de la web.
- Se debe:
- Crear un estado dentro de una función usando closures.
- Exportar dicha función para gestionar las funcionalidades de la app.
- El archivo a modificar ya existe en
playlist/js/playlist.js; solo es necesario editar ese archivo. - Cada playlist tiene:
- Nombre de la playlist
- Listado de canciones, donde cada canción incluye:
- Título
- Nombre del artista
- Género musical
- Duración en segundos
- Indicador de “favorita” (booleano)
- Lenguajes: HTML , CSS, JavaScript.
- Dependencias a destacar (Node.js): Ninguna.
- Node.js (testeado en la versión v22.15.1)
- Git (testeado en la versión 2.47.1.windows.1)
- Visual Studio Code (testeado en la versión 1.99.0)
- Live Server (VS Code addon)
git clone https://github.com/pablo-sch/keepcoding-01-javascript-basics.git> Ver Demo de Clonanción en VSCode: 🎥 Gif Demo
Proyecto bajo licencia MIT. Uso y distribución libres con atribución. No se aceptan contribuciones externas, pero las sugerencias son bienvenidas.
