Contenido del curso
0:00/67:40
Fundamentos de JavaScript con ejemplos en vivo
Suscríbete para ver másCómo resolver closures y arrays con JavaScript
play_circleViendo ahora30 días de JS con GNDX
Suscríbete para ver más30 días de JS con LeoCode
Suscríbete para ver más30 días de JS con Teffcode
Suscríbete para ver másSesión: Cierre de los 30 días de JavaScript
Suscríbete para ver másAprende a construir un planificador de tareas y una calculadora usando JavaScript, arrays y programación funcional con closures. Verás cómo organizar un CRUD, evitar mutaciones innecesarias y aplicar métodos como filter, map, sort e includes para resolver desafíos reales con confianza.
¿Cómo se resuelve un planificador de tareas con closures en JavaScript?
La idea central es crear una función que devuelve métodos que comparten el mismo estado interno: un array de tareas. Este enfoque con closure permite encapsular datos y exponer solo la interfaz necesaria para operar el planner.
¿Por qué usar un closure y higher order functions?
¿Qué métodos forman el CRUD del planner?
¿Cómo evitar mutaciones y ordenar por prioridad?
// createTaskPlanner con closure y métodos del planner function createTaskPlanner() { let tasks = []; const addTask = (task) => { const withCompleted = { ...task, completed: false }; tasks.push(withCompleted); }; const removeTask = (query) => { tasks = tasks.filter(t => t.id !== query && t.name !== query); }; const getTasks = () => tasks; const getPendingTasks = () => tasks.filter(t => !t.completed); const getCompletedTasks = () => tasks.filter(t => t.completed); const markTaskAsCompleted = (query) => { const i = typeof query === 'number' ? tasks.findIndex(t => t.id === query) : -1; if (i >= 0) { tasks[i].completed = true; } else { tasks = tasks.map(t => t.name === query ? { ...t, completed: true } : t); } }; const getSortedTasksByPriority = () => { const clone = [...tasks]; return clone.sort((a, b) => a.priority - b.priority); }; const filterTasksByTag = (tag) => tasks.filter(t => t.tags.includes(tag)); const updateTask = (id, updates) => { const i = tasks.findIndex(t => t.id === id); if (i >= 0) tasks[i] = { ...tasks[i], ...updates }; }; return { addTask, removeTask, getTasks, getPendingTasks, getCompletedTasks, markTaskAsCompleted, getSortedTasksByPriority, filterTasksByTag, updateTask, }; }
¿Qué patrones y conceptos clave se practicaron?
Se reforzaron técnicas que verás a diario en frontend y backend, además de ideas útiles para entrevistas y retos con pruebas automáticas.
¿Qué habilidades se profundizaron con arrays y funciones?
¿Cómo se trabajó el flujo de desarrollo y pruebas?
¿Qué recomendaciones ayudan a resolver más rápido?
¿Cómo se creó una calculadora con closures en minutos?
Se implementó una calculadora que mantiene un estado interno total y expone métodos para operar sobre él. El closure garantiza que el total solo cambie a través de sus métodos.
¿Qué interfaz expone la calculadora con closure?
function createCalculator() { let total = 0; return { add: (value) => (total += value), subtract: (value) => (total -= value), multiply: (value) => (total *= value), clear: () => (total = 0), getTotal: () => total, }; }
¿Qué más se mencionó sobre ecosistema y herramientas?
¿Te gustaría ver otro reto resuelto en vivo o proponer una variante del planner? Deja tu comentario con tu idea y la etiqueta que te interesa filtrar.
Gustavo Alonso Aguilar Acuña
Gregorio Navarrete
Francisco Jesús Eslava Fernández
Alexis Corrales
Cada reacción es un voto de apoyo al pobre de Juan! :c #JusticiaParaJuan! xD
hace el ejercicio 26 en el minuto 49:58 hace el ejercicio 33 en el minuto 6:00
Gracias por el tip Gregorio
excelente live