Volver
Ctrl+Space
◑
Copiar
Descargar
Restaurar
Ejecutar
Ctrl+Enter
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <title>Condicionales en JS — Ejemplo 4</title> <style> body { font-family: Arial, sans-serif; padding: 20px; background: #fff; max-width: 680px; } h3 { margin: 22px 0 8px; font-size: 15px; color: #333; } table { border-collapse: collapse; width: 100%; margin-bottom: 14px; } th { background: #F7DF1E; color: #333; padding: 8px 12px; text-align: left; font-size: 13px; } td { padding: 8px 12px; border-bottom: 1px solid #eee; font-size: 13px; } .ok { color: #059669; font-weight: bold; } .mal { color: #dc2626; font-weight: bold; } .md { color: #d97706; font-weight: bold; } .card { border: 1px solid #eee; border-radius: 8px; padding: 14px; margin: 8px 0; } .badge { display: inline-block; font-size: 11px; padding: 2px 9px; border-radius: 10px; font-weight: bold; margin-left: 6px; } .badge-ok { background: #d1fae5; color: #065f46; } .badge-mal { background: #fee2e2; color: #991b1b; } .badge-md { background: #fef3c7; color: #92400e; } </style> </head> <body> <h2>Condicionales — Caso completo</h2> <h3>Switch — días de la semana</h3> <table id="tabla-switch"></table> <h3>Sistema de envío con switch</h3> <table id="tabla-envio"></table> <h3>Calculadora de descuentos</h3> <div id="descuentos"></div> <h3>Validador de formulario combinado</h3> <div id="validador"></div> <script> // Condicionales en JavaScript - Ejemplo 4: Caso completo // ── Switch — días ───────────────────────────────────────────────────── function tipoDia(dia) { switch (dia.toLowerCase()) { case "lunes": case "martes": case "miércoles": case "jueves": case "viernes": return { tipo: "Día hábil 💼", clase: "ok" }; case "sábado": return { tipo: "Sábado 🎉", clase: "md" }; case "domingo": return { tipo: "Domingo 😴", clase: "md" }; default: return { tipo: "Desconocido", clase: "mal" }; } } const dias = ["lunes", "miércoles", "sábado", "domingo", "lunes", "jueves", "festivo"]; const tablaSwitch = document.getElementById("tabla-switch"); tablaSwitch.innerHTML = `<tr><th>Día</th><th>Tipo</th></tr>`; dias.forEach(d => { const { tipo, clase } = tipoDia(d); tablaSwitch.innerHTML += `<tr><td>${d}</td><td class="${clase}">${tipo}</td></tr>`; }); // ── Switch — sistema de envío ───────────────────────────────────────── function calcularEnvio(metodo, peso) { let costo, dias; switch (metodo) { case "express": costo = 500 + peso * 50; dias = 1; break; case "standard": costo = 200 + peso * 20; dias = 3; break; case "economico": costo = 80 + peso * 10; dias = 7; break; case "retiro": costo = 0; dias = 0; break; default: costo = null; dias = null; } return { costo, dias }; } const pedidos = [ { metodo: "express", peso: 2 }, { metodo: "standard", peso: 5 }, { metodo: "economico",peso: 3 }, { metodo: "retiro", peso: 1 }, { metodo: "dron", peso: 1 }, ]; const tablaEnvio = document.getElementById("tabla-envio"); tablaEnvio.innerHTML = `<tr><th>Método</th><th>Peso</th><th>Costo</th><th>Días</th></tr>`; pedidos.forEach(p => { const { costo, dias } = calcularEnvio(p.metodo, p.peso); const costoStr = costo === null ? `<span class="mal">N/A</span>` : costo === 0 ? `<span class="ok">Gratis</span>` : `$${costo}`; const diasStr = dias === null ? "-" : dias === 0 ? `<span class="ok">Hoy</span>` : `${dias} día${dias !== 1 ? "s" : ""}`; tablaEnvio.innerHTML += `<tr><td>${p.metodo}</td><td>${p.peso} kg</td><td>${costoStr}</td><td>${diasStr}</td></tr>`; }); // ── Descuentos combinados ───────────────────────────────────────────── function calcularDescuento(usuario, totalCompra) { let descuento = 0; let motivos = []; // Descuento por membresía if (usuario.membresia === "premium") { descuento += 0.10; motivos.push("Premium +10%"); } else if (usuario.membresia === "gold") { descuento += 0.20; motivos.push("Gold +20%"); } // Descuento adicional por monto if (totalCompra >= 5000) { descuento += 0.05; motivos.push("Compra >$5000 +5%"); } else if (totalCompra >= 2000) { descuento += 0.03; motivos.push("Compra >$2000 +3%"); } // Cupón if (usuario.cupon === "VERANO25") { descuento += 0.25; motivos.push("Cupón VERANO25 +25%"); } const totalDesc = Math.min(descuento, 0.50); // máximo 50% const precioFinal = totalCompra * (1 - totalDesc); return { descuento: totalDesc, precioFinal, motivos }; } const clientes = [ { nombre: "Ana", membresia: "gold", cupon: "VERANO25", compra: 6000 }, { nombre: "Carlos", membresia: "premium", cupon: "", compra: 2500 }, { nombre: "Bea", membresia: "free", cupon: "", compra: 800 }, ]; const divDesc = document.getElementById("descuentos"); clientes.forEach(c => { const { descuento, precioFinal, motivos } = calcularDescuento( { membresia: c.membresia, cupon: c.cupon }, c.compra ); divDesc.innerHTML += ` <div class="card"> <strong>${c.nombre}</strong> <span class="badge badge-${c.membresia === "free" ? "mal" : "ok"}">${c.membresia}</span> <br> Compra: $${c.compra} → <strong class="ok">$${precioFinal.toFixed(2)}</strong> (${(descuento * 100).toFixed(0)}% off) <br> <small style="color:#888">${motivos.length ? motivos.join(" | ") : "Sin descuentos"}</small> </div>`; }); // ── Validador combinado ─────────────────────────────────────────────── function validar(datos) { const errores = []; const nombre = datos.nombre?.trim() ?? ""; const email = datos.email?.trim() ?? ""; const edad = Number(datos.edad) ?? 0; if (!nombre || nombre.length < 2) errores.push("Nombre muy corto"); if (!email.includes("@")) errores.push("Email inválido"); if (edad < 13 || edad > 120 || isNaN(edad)) errores.push("Edad inválida"); return errores; } const casos = [ { nombre: "Ana García", email: "ana@mail.com", edad: 28 }, { nombre: "J", email: "no-email", edad: 8 }, { nombre: "", email: "x@x.com", edad: 30 }, { nombre: "Carlos", email: "carlos@ok.com", edad: 22 }, ]; const divVal = document.getElementById("validador"); casos.forEach(c => { const errores = validar(c); const ok = errores.length === 0; const badge = `<span class="badge ${ok ? "badge-ok" : "badge-mal"}">${ok ? "✓ Válido" : "✗ " + errores.length + " error/es"}</span>`; const detalle = ok ? "" : `<br><small class="mal">${errores.join(" | ")}</small>`; divVal.innerHTML += ` <div class="card"> <strong>${c.nombre || "(sin nombre)"}</strong> — ${c.email} — ${c.edad} años ${badge}${detalle} </div>`; }); </script> </body> </html>