CodeForge

JavaScript de Cero a Experto / DOM a fondo

Reto: Mi Bolsillo en pantalla

Reto35 min60 XP

Seis módulos viviendo en la consola se acabaron hoy: vas a renderizar "Mi Bolsillo" en una página de verdad — la lista de gastos construida desde el array, con formato colombiano, clases según el dato y total calculado. El mismo patrón con el que se pinta cualquier app del mundo real.

Reto

Mi Bolsillo en pantalla

Media30 min60 XP(×2 sin mirar la solución)

Qué debes construir

Con estos datos de partida:

datos.js
const gastos = [
{ nombre: "Almuerzo", valor: 18000, categoria: "comida" },
{ nombre: "Bus", valor: 5800, categoria: "transporte" },
{ nombre: "Café", valor: 4500, categoria: "comida" },
{ nombre: "Cine", valor: 25000, categoria: "ocio" },
{ nombre: "Mercado", valor: 92000, categoria: "comida" },
];

Debes producir exactamente esta página (los gastos que superan $ 20.000 van resaltados en ámbar):

El HTML de partida ya trae los contenedores vacíos (#titulo, #lista, #total, #nota) y el CSS ya define la clase .caro. TODO lo demás sale de JavaScript. Requisitos:

  1. El h1#titulo dice "Mi Bolsillo" puesto con textContent.
  2. Un formateador Intl.NumberFormat de pesos colombianos (es-CO, COP, sin decimales) creado UNA sola vez.
  3. Cada gasto se convierte en un li con createElement: texto nombre — valor formateado.
  4. Cada li lleva su dataset.categoria, y la clase caro (con classList) SOLO si el valor supera 20000.
  5. Los li entran a la lista con UNA sola inserción: append(...items) o DocumentFragment — nada de append dentro del bucle.
  6. El total se calcula con reduce y se pinta formateado en #total.
  7. #nota muestra cuántos gastos quedaron resaltados — contándolos en el DOM con querySelectorAll(".caro"), no en el array.

Reglas

  • Cero innerHTML: todo entra con createElement + textContent (los datos podrían venir de un usuario mañana).
  • La plata solo la formatea Intl — nunca a mano.
  • El estilo del resaltado vive en el CSS (.caro); JS solo pone la clase.
  • Usa el patrón iniciar para esperar el DOM.

30:00

Cuando estés listo, arranca el reloj.

Qué sigue

Tu página ya se pinta sola desde los datos… pero es una foto: no reacciona a nada. El módulo 8 le da vida de verdad: eventos y listeners — clicks, teclas, formularios — para que "Mi Bolsillo" deje de ser un reporte y se vuelva una aplicación que responde al usuario.