From 08c20e15fda692426ce1adab215c14167d4b7600 Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:11:08 -0400 Subject: [PATCH 01/15] Add ej01.js demonstrating let and const usage --- ej01.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 ej01.js diff --git a/ej01.js b/ej01.js new file mode 100644 index 0000000..7f768f9 --- /dev/null +++ b/ej01.js @@ -0,0 +1,14 @@ + +// Concepto: let y const respetan el bloque; const impide reasignación, let la permite. +// Completa con let o const según corresponda para obtener la salida indicada. +let x = 10; +if (true) { + let x = 20; // declara una nueva variable en este bloque + console.log(x); // 20 +} +console.log(x); // 10 + +const obj = { valor: 5 }; +obj.valor = 8; // mutación permitida +// obj = {}; // Error si la palabra clave es correcta +console.log(obj.valor); // 8 From 9985b8b93c55fa0e59e488f2a8731d766685831f Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:12:22 -0400 Subject: [PATCH 02/15] Implement object mutation and copy example Add example of object mutation and copying in JavaScript. --- ej02.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 ej02.js diff --git a/ej02.js b/ej02.js new file mode 100644 index 0000000..b8a546a --- /dev/null +++ b/ej02.js @@ -0,0 +1,10 @@ +// Concepto: `const` impide reasignar la variable, pero permite modificar propiedades. +const persona = { nombre: "Ada", edad: 25 }; +persona.edad = 26; // mutación válida + +// Completa para crear una copia con una propiedad adicional, sin alterar el original: +const actualizado = { ...persona, activo: true }; +console.log(actualizado); // { nombre: "Ada", edad: 26, activo: true } + +// Ahora completa para mostrar la edad del objeto original: +console.log(persona.edad); // 26 From d3b98a25ec75f1733523d229dbd7d4f73bd9b37c Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:13:37 -0400 Subject: [PATCH 03/15] Add default parameters to crearLibro function --- ej03.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 ej03.js diff --git a/ej03.js b/ej03.js new file mode 100644 index 0000000..984c8ee --- /dev/null +++ b/ej03.js @@ -0,0 +1,11 @@ +// Concepto: Los parámetros pueden tener valores por defecto. +// Para devolver un objeto desde una función se construye con { ... }. +const crearLibro = (titulo, autor = "Anónimo", año = new Date().getFullYear()) => { + return { titulo, autor, año }; +}; + +console.log(crearLibro("El Principito", "Saint-Exupéry", 1943)); +// { titulo: "El Principito", autor: "Saint-Exupéry", año: 1943 } + +console.log(crearLibro("1984")); +// { titulo: "1984", autor: "Anónimo", año: 2026 } From a926c3f1e84b65ad22510a50fe05594435fb57cb Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:14:21 -0400 Subject: [PATCH 04/15] Rename rest parameter for clarity in generarInforme --- ej04.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ej04.js diff --git a/ej04.js b/ej04.js new file mode 100644 index 0000000..150dbc6 --- /dev/null +++ b/ej04.js @@ -0,0 +1,6 @@ +// Concepto: ...rest captura argumentos sobrantes en un array real. +function generarInforme(categoria, ...items) { + return `Informe de ${categoria}: ${items.join(" – ")}`; +} +console.log(generarInforme("Ventas", "Enero", "Febrero", "Marzo")); +// "Informe de Ventas: Enero – Febrero – Marzo" From de4af90ca892d55abc82e8fd8d4a3ed39cf8c18a Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:15:00 -0400 Subject: [PATCH 05/15] Add examples of spread operator usage Demonstrate spread operator for arrays and objects. --- ej05.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 ej05.js diff --git a/ej05.js b/ej05.js new file mode 100644 index 0000000..571927e --- /dev/null +++ b/ej05.js @@ -0,0 +1,11 @@ +// Concepto: El spread copia superficialmente; útil para inmutabilidad. +const valores = [10, 20, 30]; +const doble = valores.map(n => n * 2); +// Usando spread, crea un array con el primer elemento de 'valores', luego los duplicados: +const mezcla = [valores[0], ...doble]; +console.log(mezcla); // [10, 20, 40, 60] + +// Completa para clonar un objeto y sobrescribir una propiedad: +const objBase = { x: 1, y: 2 }; +const objMod = { ...objBase, y: 100 }; +console.log(objMod); // { x: 1, y: 100 } From a4d3c3eda7bea4497ac378adaa12e247cae91a18 Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:16:08 -0400 Subject: [PATCH 06/15] Fix variable access in ej06.js --- ej06.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 ej06.js diff --git a/ej06.js b/ej06.js new file mode 100644 index 0000000..32d0a29 --- /dev/null +++ b/ej06.js @@ -0,0 +1,16 @@ + +// Concepto: ?.[variable] accede a una posición de array de forma segura; ?.() llama a métodos. +const estructura = { + bloques: [ + { id: "a", ejecutar: () => "A ejecutado" }, + null, + { id: "c", acciones: ["imprimir"] } + ] +}; +const idx = 0; +const res0 = estructura.bloques?.[idx]?.ejecutar?.(); +console.log(res0); // "A ejecutado" +const res1 = estructura.bloques?.[1]?.idx?.(); +console.log(res1); // undefined +const res2 = estructura.bloques?.[2]?.acciones?.[0]; +console.log(res2); // "imprimir" From 3b64ab7edf78791e8b08dc07a5cca826781eb309 Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:16:46 -0400 Subject: [PATCH 07/15] Add product filtering and listing functionality Create a list of active products with prices above 30. --- ej07.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 ej07.js diff --git a/ej07.js b/ej07.js new file mode 100644 index 0000000..68a1a3c --- /dev/null +++ b/ej07.js @@ -0,0 +1,12 @@ +// Concepto: Puedes encadenar varios métodos de array. .join() convierte un array en una cadena. +const productos = [ + { nombre: "Laptop", precio: 1000, activo: true }, + { nombre: "Mouse", precio: 20, activo: true }, + { nombre: "Teclado", precio: 50, activo: true }, + { nombre: "Monitor", precio: 200, activo: false } +]; +const lista = productos + .filter(p => p.activo && p.precio > 30) + .map(p => p.nombre) + .join(" – "); +console.log(lista); // "Laptop – Teclado" From 4899d787e07568b8a066e0c79b1f5d086ac34ccc Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:17:30 -0400 Subject: [PATCH 08/15] Extract nested properties with default values Define default values for nested properties in objects. --- ej08.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 ej08.js diff --git a/ej08.js b/ej08.js new file mode 100644 index 0000000..17329eb --- /dev/null +++ b/ej08.js @@ -0,0 +1,23 @@ +// Concepto: Extrae propiedades anidadas, asígnale alias y define un valor por defecto si no existe. +const pedido = { + id: 101, + cliente: { + nombre: "Carlos", + direccion: { + ciudad: "Lima" + } + } +}; +const { + id, + cliente: { + nombre: clienteNombre, + direccion: { ciudad: ciudadEntrega = "Sin dirección" } + } +} = pedido; +console.log(clienteNombre, ciudadEntrega); // "Carlos" "Lima" + +// Completa para que en el siguiente objeto sin dirección se obtenga "Desconocida": +const pedido2 = { id: 102, cliente: { nombre: "Ana" } }; +const { cliente: { direccion: { ciudad = "Desconocida" } = {} } } = pedido2; +console.log(ciudad); // "Desconocida" From ba4ddf926edc71ba35072cee33d6226a63a45979 Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:17:57 -0400 Subject: [PATCH 09/15] Implement safe access and default values in ej09.js Add safe access and default value examples using optional chaining and nullish coalescing. --- ej09.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 ej09.js diff --git a/ej09.js b/ej09.js new file mode 100644 index 0000000..9955092 --- /dev/null +++ b/ej09.js @@ -0,0 +1,11 @@ +// Concepto: ?. para acceso seguro, ?? para dar un valor solo si es null/undefined. +const config = { + servidor: { + cache: { + ttl: 0 // 0 es válido + } + } +}; +const ttlFinal = config?.servidor?.cache?.ttl ?? 3600; // 0 (el 0 se respeta) +const timeout = config?.servidor?.timeout ?? 5000; // 5000 (no existe) +console.log(ttlFinal, timeout); // 0 5000 From 274e5230108def94eb9b432bafae99ddcc8f0135 Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:20:54 -0400 Subject: [PATCH 10/15] Create ej10.js --- ej10.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ej10.js diff --git a/ej10.js b/ej10.js new file mode 100644 index 0000000..856ad0c --- /dev/null +++ b/ej10.js @@ -0,0 +1,6 @@ +// Concepto: ??= asigna si la variable es null/undefined, respetando falsy. +const ajustes = { compresion: false, nivel: 0 }; +ajustes.compresion ??= true; // no cambia (false no es null/undefined) +ajustes.nivel ||= 5; // sí cambia porque nivel es 0, que es falsy pero no null/undefined +// ¿Qué operador de asignación completa la línea? (escribe el operador) +console.log(ajustes); // { compresion: false, nivel: 5 } From ef42b533a2729a9e0a083fa2d4b6d3d3e73ce04c Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:22:31 -0400 Subject: [PATCH 11/15] Add formatear and resumir functions in ej11.js --- ej11.js | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 ej11.js diff --git a/ej11.js b/ej11.js new file mode 100644 index 0000000..8072bd0 --- /dev/null +++ b/ej11.js @@ -0,0 +1,11 @@ +const formatear = ({ nombre, edad, pais = "No especificado" }) => + ({ nombre, edad, etiqueta: `${nombre} (${pais})` }); + +console.log(formatear({ nombre: "Luis", edad: 30, pais: "Perú" })); +// { nombre: "Luis", edad: 30, etiqueta: "Luis (Perú)" } + +// Ahora completa la versión con parámetros separados y rest: +const resumir = (titulo, ...datos) => + ({ titulo, total: datos.length, primer: datos[0] }); +console.log(resumir("Ventas", "Enero", "Febrero")); +// { titulo: "Ventas", total: 2, primer: "Enero" } From e88a2af3cd21c10318d43f25577f66a5fbf40091 Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:24:10 -0400 Subject: [PATCH 12/15] Refactor employee data and add grade checks Removed employee data and related operations. Added logic to check if all grades are passing and if any grade is outstanding. --- ej13.js | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ej13.js diff --git a/ej13.js b/ej13.js new file mode 100644 index 0000000..238cf16 --- /dev/null +++ b/ej13.js @@ -0,0 +1,4 @@ +const calificaciones = [85, 92, 78, 95]; +const todosAprobados = calificaciones.every(n => n >= 70); // true +const algunSobresaliente = calificaciones.some(n => n >= 90); // true +console.log(todosAprobados, algunSobresaliente); From ccb7288d640d59b54da34085cacab857469dcea2 Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:25:04 -0400 Subject: [PATCH 13/15] Add function to fetch and log user data by ID --- ej15.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 ej15.js diff --git a/ej15.js b/ej15.js new file mode 100644 index 0000000..b091a2e --- /dev/null +++ b/ej15.js @@ -0,0 +1,10 @@ +const obtenerUsuario = async (id) => { + try { + const respuesta = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`); + if (!respuesta.ok) throw new Error("Error de red"); + const datos = await respuesta.json(); + console.log(datos.name); + } catch (error) { + console.error(error.message); + } +}; From 22b4dacdb45692a10cdb96ff4f27b4c39aa61e82 Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:25:58 -0400 Subject: [PATCH 14/15] Add stock status check and message logging --- ej17.js | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 ej17.js diff --git a/ej17.js b/ej17.js new file mode 100644 index 0000000..2fec696 --- /dev/null +++ b/ej17.js @@ -0,0 +1,4 @@ +const stock = 5; +const estado = stock > 10 ? "Alto" : (stock > 0 ? "Bajo" : "Agotado"); +const mensaje = `Estado del producto: ${stock > 0 ? `Quedan ${stock}` : $[5]}`; +console.log(mensaje); // "Estado del producto: Quedan 5 From e04783d177c59ed5b9d502c72a8e46fa3dd53c4a Mon Sep 17 00:00:00 2001 From: samuela200 Date: Thu, 14 May 2026 12:27:08 -0400 Subject: [PATCH 15/15] Implement safe access for product names Add safe access to product names in tienda object --- ej19.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 ej19.js diff --git a/ej19.js b/ej19.js new file mode 100644 index 0000000..c21e69f --- /dev/null +++ b/ej19.js @@ -0,0 +1,13 @@ +const tienda = { + secciones: [ + { nombre: "Electrónica", productos: [{ nombre: "TV" }] }, + null + ] +}; +// Accede de forma segura al nombre del primer producto de la primera sección +const primerProducto = tienda?.secciones?.[0]?.productos?.[0]?.nombre; +console.log(primerProducto); // "TV" + +// Intenta acceder a la sección nula y a su primer producto +const segundoProducto = tienda?.secciones?.[1]?.productos?.[0]?.nombre; +console.log(segundoProducto);tv // undefined