Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

19 Días
6 Hrs
11 Min
20 Seg

ForEach

2/28
Recursos
Transcripción

El método forEach de los arrays consiste en ejecutar una función (callback) para cada uno de los elementos iterados. Iterar significa repetir una acción varias veces.

Este método recibe dos argumentos:

  • La función que itera cada elemento del array (obligatorio).
  • Un objeto al que puede hacer referencia el contexto this en la función. Si se lo omite, será undefined. Recuerde que this en arrow functions es el objeto global.
array.forEach(function(), thisArg)

La función, que recibe como argumento el método forEach, utiliza tres parámetros opcionales:

  • El valor actual del elemento iterado. Es decir, si es la primera iteración, será el primer elemento, y así sucesivamente.
  • El índice del elemento iterado. Es decir, si es la primera iteración, será el índice 0, y así sucesivamente.
  • El array que está iterando.
array.forEach(function(element, index, array))

Diferencia entre la estructura for y el método forEach

Los métodos de arrays nos permiten realizar algoritmos con una menor cantidad de líneas que una estructura for, con un resultado igual o parecido.

const letters=['a','b','c']

// Utilizando la estructura repetitiva for
for(let index=0; index<letters.length; index++){
    const element=letters[index]
    console.log('for',element)
}

// Utilizando el método forEach
letters.forEach(item => console.log('forEach',item))

Mostrar elementos de un array al usuario

Ahora que ya conoces cómo funciona el método forEach, utilízalo para agregar elementos al HTML y así que el usuario lo mire.

Por ejemplo, en un archivo HTML agrega una etiqueta div con un id app, que nos servirá para agregar nuestros elementos.

<div id="app"></div>

Después crea la lógica en un archivo de JavaScript.

const products = [
  { title: 'Burger', price: 121 },
  { title: 'Pizza', price: 20 },
  { title: 'Soda', price: 5 },
]

const app = document.getElementById('app')

products.forEach(product => {
  app.innerHTML += `<li>${product.title} -$ ${product.price}</li>`
})

Y listo, en pantalla aparecerán los elementos del array products con su título y precio. Revisa el resultado en este codi.link.

Ejercicio utilizando la función forEach

Crea una lista de tareas, a partir de un array que contenga el título y el estado (completado o no) y muéstralos en un archivo HTML. Puedes utilizar un input de tipo checkbox para indicar el estado de la tarea. ¡Comparte tu trabajo en la sección de aportes!

Contribución creada por: Andrés Guano.

Aportes 273

Preguntas 17

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Tip

En el curso de Manipulación del DOM el profesor nos dice lo malo que es para el performance hacer muchas llamadas al DOM por lo que si quieres mejorar esto un poco, podrias:

En lugar de insertar en cada llamado al HTML, los almacenamos todos en un array

const nodes = []

y luego en cada llamado lo añadimos al array

tasks.forEach(({ title, done }) => {
    const element = `
         <li>
          	 <input 
                     type='checkbox' 
                     id='${title}' 
                     name='${title}' 
                     ${done && 'checked'} />
                  <label for='${title}' >${title} </label>   
         </li>`;
nodes.append(element)                    

por último añadimos todo el array al DOM

app.append(nodes)

De esta forma reducimos la cantidad de inserciones al DOM, y mejoramos el performance un poco 😃

Hola!
aquí dejo mi solución al reto propuesto 😄

const app = document.getElementById('app');

const tasks = [
    { title: 'make dinner', done: false },
    { title: 'sweep the floor', done: true },
    { title: 'feed the kittens', done: true },
    { title: 'buy groceries', done: false },
    { title: 'take a bath', done: true },
];

tasks.forEach(({ title, done }) => {
    const element = `
         <li>
          	 <input 
                     type='checkbox' 
                     id='${title}' 
                     name='${title}' 
                     ${done && 'checked'} />
                  <label for='${title}' >${title} </label>   
         </li>`;
app.insertAdjacentHTML('beforeend', element);});

Soy novato en Js vanilla pero solucione así

<script>
      const tasks = [
        {
          task: 'Tarea 1',
          descp: 'Descripcion de la tarea 1',
          done: false,
        },
        {
          task: 'Tarea 2',
          descp: 'Descripcion de la tarea 2',
          done: true,
        },
        {
          task: 'Tarea 3',
          descp: 'Descripcion de la tarea 3',
          done: false,
        },
        {
          task: 'Tarea 4',
          descp: 'Descripcion de la tarea 4',
          done: true,
        },
      ];
      
      const app = document.getElementById('app');

      tasks.forEach(task => {
        app.innerHTML += `
        <li> 
          Nombre: ${task.task} ||  
          Descripción: ${task.descp} - 
          <input type="checkbox" ${task.done ? 'checked' : ''}/>
        </li>`
      });
    </script>
<body>
    <div id="app"></div>
    <script>
        const works = [
            {title: 'Design logo', status: 'Complete'},
            {title: 'Develop head', status: 'Incomplete'},
            {title: 'Develop Main', status: 'Complete'},
            {title: 'Develop Footer', status: 'Incomplete'},
        ];

        const app = document.getElementById('app');
        works.forEach(work => {
            app.innerHTML += `<li >${work.title} - ${work.status} <input type="checkbox"> </li>`;
        });
    </script>   
</body>

Desde Visual Studio Code, tambien se puede utilizar la extension de Live Server de Ritwick Dey para usarla como servidor y ver pintado el codigo en HTML

Extensión Code Runner para VS Code, utilizada por el profesor

Mejor que el live-server de VS Code y más fácil que usar npx http-server puedes instalar el paquete live-server de npm. Si ya tienes instalado node y npm puedes instalar este paquete globalmente con la siguiente línea:

npm install -g live-server

Entonces solamente es cuestión de que pongas este comando para correrlo:

live-server

Listo, ahora se te abrirá en el navegador.

ForEach método útil para recorrer un array y realizar alguna operación sobre cada elemento del mismo

Esta es mi solución, lo hice agregando Node elements al dom en vez de hacerlo con InnerHTML, ya que me parece mas cool, aunque alargue un poco el código!

Mi solución al reto : )
.
Hice un array con tareas, las cuales tiene un título y pueden estarn completas o incompletas . Si están completas se renderizan con un “checked input” y si no se presentan con la casilla aún vacía.
.

.

<div id="app">
    </div>
    <script>
        let tasks = [
            {title: "Estudiar cálculo", done: false},
            {title: "Estudiar JavaScript", done: true},
            {title: "Estudiar inglés", done: true},
            {title: "Hacer ejercicio", done: false}
        ]

        tasks.forEach(task => {
            if(task.done == true) {
                app.innerHTML += 
		`<p> <input type="checkbox" name="${task.title}" checked> 
		<label for="${task.title}">${task.title}</label> <\p>`
            } else {
                app.innerHTML += 
		`<p> <input type="checkbox" name="${task.title}"> 
		<label for="${task.title}">${task.title}</label> <\p>`
            }           
        });
    </script>


Le agrege algo CSS y por lo tanto en el cliclo forEach tuve que poner más código para crear más elementos en el DOM,
aunque me faltó investigar como marcar los inputs como terminados.

Lanzar http-server:

npx http-server client 

😮 Genial, no sabia lo poderoso que es ForEach

Mi solución del reto 😊

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Manipulación de arrays</title>
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300&display=swap');

        * {
            padding: 0;
            margin: 0;
            list-style: none;
            text-decoration: none;
            font-family: 'Montserrat', sans-serif;
        }

        h2 {
            text-align: center;
            margin-bottom: 10px;
        }

        .list {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
            gap: 10px;
            justify-content: center;
            align-items: center;
            margin: auto;
            width: 700px;
            margin-bottom: 20px;
        }

        .list>li {
            align-self: center;
            border: 1px solid gray;
            padding: 5px 10px;
            border-radius: 5px;
            text-transform: capitalize;
        }

        .list>li h4 {
            margin: 5px 0;
        }

        .list>li img {
            width: 100px;
            height: 100px;
        }

        .list>li span {
            font-size: 10px;
            font-weight: bold;
            background-color: gainsboro;
            padding: 2px 5px;
            border-radius: 5px;
        }

        .list>li p {
            display: flex;
            justify-content: space-between;
            font-size: 14px;
        }
    </style>
</head>

<body>
    <h2>Lista de frutas</h2>
    <ul id="app" class="list">
    </ul>
    <h2>Lista de tareas</h2>
    <ul id="tasks" class="list">
    </ul>
</body>
<script>
    const products = [
        {
            id: 1,
            name: "platano",
            stock: 10,
            price: 2.0,
            image: "https://i.ibb.co/7bC8szm/platano.png",
            category: {
                id: 1,
                name: "frutas frescas",
                image: "https://i.ibb.co/BqWwTkD/categoria-fruta.webp",
            },
        },
        {
            id: 2,
            name: "fresa",
            stock: 10,
            price: 5.0,
            image: "https://i.ibb.co/hKNwfmP/fresa.png",
            category: {
                id: 1,
                name: "frutas frescas",
                image: "https://i.ibb.co/BqWwTkD/categoria-fruta.webp",
            },
        },
        {
            id: 3,
            name: "mandarina",
            stock: 10,
            price: 3.5,
            image: "https://i.ibb.co/7bC8szm/platano.png",
            category: {
                id: 1,
                name: "frutas frescas",
                image: "https://i.ibb.co/M2Pt0xX/mandarina.png",
            },
        },
    ];
    const tasks = [
        {
            id: 1,
            name: "Comprar frutas",
            completed: false,
        },
        {
            id: 2,
            name: "Comprar verduras",
            completed: false,
        },
        {
            id: 3,
            name: "Comprar carne",
            completed: true,
        },
    ];
    const formatoSoles = (monto) => {
        let formatoSoles = new Intl.NumberFormat('es-PE', {
            style: 'currency',
            currency: 'PEN',
        });
        return formatoSoles.format(monto);
    };
    const app = document.getElementById('app');
    products.forEach((item) => {
        const list = document.createElement('li');
        list.innerHTML += `
            <span>${item.category.name}</span>
            <h4>${item.name}</h4>
            <p>
                <label>${formatoSoles(item.price)}</label>
                <label>${item.stock} productos</label>    
            </p>
            <img src="${item.image}" alt="${item.name}">
        `;
        app.appendChild(list);
    });
    const task = document.getElementById('tasks');
    tasks.forEach((item) => {
        const list = document.createElement('li');
        list.innerHTML += `
            <label for="task"> ${item.name}</label><br>
        `;
        const checkbox = document.createElement('input');
        checkbox.type = 'checkbox';
        checkbox.id = 'completed';
        checkbox.name = 'task';
        checkbox.checked = item.completed;
        list.insertAdjacentElement('afterbegin', checkbox);
        task.appendChild(list);
    });
</script>

</html>

Mi aporte 😃

code:

    <div id="root"></div>
    <h2>Tareas Completadas</h2>
    <ul id="list"></ul>
    <script src="./src/index.js" type="module"></script>
</body>
const ELEMENT = [
  { name: "tarea", value: "Limpieza", id: 1 },
  { name: "tarea", value: "Leer", id: 2 },
  { name: "tarea", value: "Salir a caminar", id: 3 },
  { name: "tarea", value: "Desayunar", id: 4 },
];

ELEMENT.forEach(({ value, name, id }) => {
  document.getElementById("root").innerHTML += `
    <input type="checkbox" value=${value} name="${name}" id="${id}">${value} `;
});

ELEMENT.forEach((list) => {
  const taskId = document.getElementById(list.id);
  taskId.addEventListener("click", () => {
    if (taskId.checked) {
      document.getElementById("list").innerHTML += `
              <li id="text${taskId.id}" name="${taskId.name}"> ${taskId.value}: Completada </li>
            `;
    }
    if (!taskId.checked) {
      const rm = document.getElementById(`text${taskId.id}`);
      rm.parentNode.removeChild(rm);
    }
  });
});
``

Advice


  • Pueden correr el html con una extensión que se llama live server de vsc.

Pd


  • Ni siquiera van a tener que recargar la página

Reto completado:

// reto: renderizar una lista de tareas con forEach
    const reto = document.getElementById('reto');
    
    const tasks = [{
        task: '10 minutos de lectura',
        status: 'completed',
        repeat: true
      },
      {
        task: 'tomar curso de intro a node.js',
        status: 'ongoing',
        repeat: false
      },
      {
        task: 'hacer reto de forEach',
        status: 'completed',
        repeat: false
      },
      {
        task: 'bañar al perro',
        status: 'incompleted',
        repeat: true
      },
      {
        task: 'bañarme',
        status: 'incompleted',
        repeat: true
      }
    ];

    tasks.forEach(t => {
      reto.innerHTML += `
        <div>
          <input type="checkbox" id="${t.task}" name="${t.task}">
          <label for="${t.task}">${t.task} | status: ${t.status} | ¿se repite?: ${t.repeat}</label>
        </div>
      `
    });

Aqui dejo mi reto, quise como lograr que se tachara al tocar las checkbox, pero no logre que se quitaran, tal vez la logica no sirva para eso, intente con if y no funciono igual, pero la meta era lograr que se tacharan jaja
Igualmente trate de hacerlo con forEach pero creo aqui si era necesario el for normal, ya que necesitaba el numero del array para el label.

 const form = document.getElementById('form')
        let tasks = [
          {description: 'Estudiar ingles', status: false}, 
          {description: 'Estudiar porlomenos 1 hora', status: false}, 
          {description: 'Organizar reunion de congreso', status: false}, 
          {description: 'Hacer ejercicio manana', status: false}, 
        ]
        tasks.forEach((task)=>{
        
          form.innerHTML += ` 
          </form><label for="${task.description}" class="label">
            <input id="${task.description}" type="checkbox" class="checkbox">
            ${task.description}
            </label><br>
            `
      })
      const label = document.querySelectorAll("label");
      const checkbox = document.querySelectorAll(".checkbox");
      console.log(checkbox);
      console.log(label);
      
      for (let i = 0; i < checkbox.length; i++) {   
          checkbox[i].addEventListener("click",function(){label[i].style.textDecoration = 'line-through'});
        }

Esta es mi solución! No está muy trabajada, hice algo rápido simplemente para probar:
.

html

<body>
        <main>
            <div id="task-list"></div>
        </main>
        <template id="task-template">
            <label class="task-label">
                <input class="task" type="checkbox" />
            </label>
        </template>

        <script src=" <!-- codigo JS -->"></script> 
    </body>

JS

const taskList = document.getElementById('task-list')
const template = document.getElementById('task-template').content
const fragment = document.createDocumentFragment()

const tasks = [
    { content: 'Terminar la tarea', complete: false },
    { content: 'Regar las plantas', complete: false },
    { content: 'Ver curso', complete: false },
]

tasks.forEach(task => {
    const clone = template.cloneNode(true)
    const label = clone.querySelector('.task-label')

    label.innerHTML += task.content
    label.querySelector('.task').addEventListener('change', e => {
        task.complete ? (task.complete = false) : (task.complete = true)
        // console.log(task)
    })

    fragment.appendChild(clone)
})

taskList.appendChild(fragment)

pueden usar https://stackblitz.com/ para no generar un server propio y darle muchas vueltas

listo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="lista"></div>
    <script>
        const ingredientes = [
            { element: "zanahoria", status: "Complete"},
            { element: "pollo", status: "Imcomplete"},
            { element: "lechuga", status: "Complete"},
            { element: "arroz", status: "Imcomplete"},
            { element: "papa", status: "Imcomplete"},
            { element: "pescado", status: "Complete"},
        ]

        const lista = document.getElementById("lista");
        ingredientes.forEach(ingrediente => [
            lista.innerHTML += `<li>${ingrediente.element} - ${ingrediente.status} <input type="checkbox"></li>`
        ]);
    </script>
</body>
</html>

Adjunto mi reto

HTML

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Reto For each</title>
    <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@600&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="/css/style.css">
</head>
<body class="container">
    <div class="titulo" >LISTA DE TAREAS</div>
    <div id="app"></div>


</body>


<script src="/server/01-for-each-reto.js"></script>

</html> 

JS

const tareas = [
    {titulo: 'Lavar el carro', descripcion: 'Lavar el carro con la manguera nueva', done: false},
    {titulo: 'Sacar el perro ', descripcion: 'Dar la vuelta a la manzana', done: true},
    {titulo: 'Limpiar las ventanas ', descripcion: 'Ventanas del edificio 301', done: true},
    {titulo: 'Estudiar para el examen ', descripcion: 'Examen de matematicas', done: true,}

];
const app = document.getElementById('app');
tareas.forEach(tarea => {
    app.innerHTML += `<li>Tarea: ${tarea.titulo} Descripcion: ${tarea .descripcion}  <input type="checkbox" ${tarea.done ? 'checked' : ''} /> </li>`
}) 

CSS

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
  }
 html {
    font-size: 62.2%;
}

.container {
    display: flex;
    flex-direction: column;
    justify-content: center;
    width: auto;
    align-items: center;
    font-family: 'Nunito', sans-serif;
    font-size: 20px;
    height: 800px;
}

#app {
    margin: 10px;
    background-color: #fff;
    border-radius: 10px;
    box-shadow: 0 2px 20px rgba(0, 0, 0, 0.2);
    overflow: hidden;
    width: 700px;
    padding: 30px;
    list-style: circle;
}

.titulo {
    font-size: 40px;

}```


const tasks = [
  { name: 'study', done: true },
  { name: 'gym', done: false },
  { name: 'food', done: true },
  { name: 'clothes', done: false },
  { name: 'books', done: false },
  { name: 'games', done: true },
];

const app = document.getElementById('app');
tasks.forEach((task) => {
  app.innerHTML += `
  <li>
    <input type="checkbox" ${task.done ? 'checked' : ''} />
    <label>${task.name}</label>  
  </li>`;
});

Hola, yo lo realice de esta forma:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app"></div>
    <script>
        const products = [
            { title: 'Burger', price: 121 },
            {title: 'pizza', price: 20},
        ];

        const app = document.getElementById('app');
        products.forEach(product => {
            app.innerHTML += `<li>${product.title} - ${product.price}</li>`;
        });

        const tasks = [
            {title: 'task1', done: true},
            { title: 'task2', done: false},
            { title: 'task3', done: true}
        ];

        tasks.forEach(task => {
            let item = document.createElement('li');
            let input = document.createElement('input');
            input.type = 'checkbox';

            if(task.done === true){
                input.checked = true;
            }

            item.innerHTML = `<p>${task.title}</p>`;
            item.appendChild(input);
            app.appendChild(item);
            
            
            
        })
    </script>
</body>
</html>

Esta es mi solución al reto, el checkbox de la lista de tareas se renderiza de acuerdo a si la tarea esta completada o no 😃

 <script>

        const tasks =[
            { description: 'Make a Web page', completed: false },
            { description: 'Take a course', completed: true },
            { description: 'Do yoga', completed: false },
            { description: 'Go to the supermarket', completed: true }
        ];

        const app = document.getElementById('app');
        tasks.forEach( task => {
            app.innerHTML += `<label><input type="checkbox" value="checkbox" 
                ${task.completed === true ? 'checked' : ''}>${task.description}</label><br>` 
        });
        
    </script>

![](

Mi solución al reto

Mi solución inspirado en aportes de compañeros.
.

.
Resultado visto en el navegador
.

HTML

<body>
    <div id="f-E">
    </div>
    <script src="main.js"></script>
</body>
const tasks = [
  { title: 'GIT', status: false },
  { title: 'Ingles', status: false },
  { title: 'JavaScript', status: true },
  { title: 'React', status: false }
]

const app = document.getElementById('app')

tasks.forEach(({ title, status }) => {
  app.innerHTML += `<li>${title} - ${status} <input type="checkbox" ${status ? 'checked' : ''} /></li>`
})

Aquí mi solución, me apoyé de código de algunos compañeros porque no tenía idea de como agregar el checkbox.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>reto</title>
</head>
<body>
    <div id="app"></div>
    <script>
        const tareas = [
        {curso: "EcmaScript", profesor: "Oscar Barajas", numeroDeClases: 14, estado: true},
        {curso: "Manipulación de Arrays", profesor: "Nicolas Molina", numeroDeClases: 27, estado: false},
        {curso: "Curso de asincronismo", profesor: "Oscar Barajas", numeroDeClases: 12, estado: false},
        {curso: "Curso de consumo de API rest", profesor: "Juan Castro", numeroDeClases: 20, estado: false},
        ];
        const app = document.getElementById("app");
        tareas.forEach(tarea => {
            app.innerHTML += `<li> Curso: ${tarea.curso} || Profesor:${tarea.profesor} || Número de clases:${tarea.numeroDeClases} || <input type="checkbox" ${tarea.estado? 'checked' : ''}/></li>`;
        })
    </script>
</body>
</html>

Reto

const list = document.getElementById("list");

const toDo = [
    { place: "home", activity: "cleanning"},
    { place: "work", activity: "data warehouse" },
    { place: "school", activity: "project"}
];

toDo.forEach(element => {
    list.innerHTML += `<li>${element.place}: ${element.activity} <input type="checkbox"></input></li>`;
})

Mi solución al reto:
Mi lista de tareas ek JS funciona bien, agrega y elimina tareas. Solo que cuando la elimina la tarea del Array no cambia en el HTML, falta ese detalle por solucionar.
HTML

<section class="tasklist-section">
            <div class="tasklist-container">
                <label for="tarea" class="tasklist_input-container">
                    <span class="tasklist_input-container--title">Tarea:</span>
                    <input type="text" placeholder="Ej. Hacer ejercicio..." id="tarea" name="tarea" class="tasklist_input-container--input">    
                </label>
                <button id="btn-task" class="add-btn">Añadir</button>
                <div class="lista-tareas">
                    <h2 class="lista-tareas_title">Tareas</h2>
                </div>
                <button class="delete">Eliminar tareas Seleccionadas</button>
            </div>
        </section>

JavaScript

const tarea = document.querySelector('#tarea');
const tareasPendientes = document.querySelector('.lista-tareas');
const btn = document.querySelector('#btn-task');
const tareas = [];
const tareasListas = [];
let checkbox;
const delete_btn = document.querySelector('.delete')

btn.addEventListener('click', crearTarea)

function crearTarea(){
    let task = tarea.value
    if(task == '' || task == null){
        alert("Deber introducir una tarea")    
    }
    else {
        tareas.push({title: task, completed: false})
        tareasPendientes.innerHTML += `<div><li>${task}</li><input type="checkbox" id="task-input"></div>`
        
        checkbox = document.getElementById('task-input');
        tareas.forEach(task => task.completed = checkbox)
        console.log(tareas)
    }
}

delete_btn.addEventListener('click', function(){
    tareas.forEach(task => {
        if(task.completed.checked){
            tareas.splice(task, 1)
            console.log("yuhu")
        }
        else {
            console.log("nahh")
        }
        console.log(tareas)
    })
})

Asi lo hice

     <div id="app"></div>
    <script>
    
        const app = document.getElementById("app")
        const tareas = [
            { tarea: "Limpiar", estado: true },
            { tarea: "Hacer la tarea", estado: true },
            { tarea: "Dormir", estado: false },
        ]

        tareas.forEach(tarea => {
            if(tarea.estado){
                app.innerHTML += `<label style="display: block;">Tarea: ${tarea.tarea}
                        estado: ${tarea.estado}</label>  <input type="checkbox" checked>`;
            }else{
                app.innerHTML += `<label style="display: block;">Tarea: ${tarea.tarea}
                        estado: ${tarea.estado}</label>  <input type="checkbox">`;
            }    
        });


    </script>



const works = [
            { title: 'bath', time: '5:00 am'},
            { title: 'breackfast', time: '5:30 am'},
            { title: 'take a bus', time: '6:00 am'},
            { title: 'work', time: '7:00 am'},
            { title: 'home', time: '7:00 pm'},
            
        ];
        const app = document.getElementById('app');
        works.forEach(tareas => {
            app.innerHTML+=`<li>${tareas.title}-${tareas.time} </li> `
        })

Yo lo hice de la siguiente manera…

const app = document.getElementById('app');
const taskList = [
    {task: 'Make Dinner', done: true},
    {task: 'Go to shopping', done: true},
    {task: 'Make my home-work', done: false},
    {task: 'Pick up my mom', done: false},
    {task: 'Call my dad', done: false},
    {task: 'Call the radio station', done: true},
]
let isCheck;
let counter = 0;
taskList.forEach(element => {
    isCheck = "";
    if(element.done){
        isCheck = "checked"
        counter++
    }
    app.innerHTML += `Task: ${element.task}<br>Done:<input type="checkbox" ${isCheck}> <br><br>`
});

document.getElementById('counter').innerHTML = `Cantidad de task: ${taskList.length}<br>Completada: ${counter}`

Esto fue lo que a mí me se ocurrió:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>For each reto</title>
</head>
<body>
  <div id="app">
    <label for="tarea">Tarea: </label>
    <input type="text" name="" id="tarea" placeholder="Tarea">
    <label for="completada">¿Completada?</label>
    <input type="checkbox" name="" id="completada">
    <button type="button" id="botonAgregarTarea">Agregar tarea</button>
    <button type="button" id="botonMostrarTareas">Mostrar tareas</button>
    <ul id="allTasks"></ul>
  </div>
  <script src="../server/forEachReto.js"></script>
</body>
</html>
const app = document.getElementById('app');
const tarea = document.getElementById('tarea');
const completada = document.getElementById('completada');
const botonAgregarTarea = document.getElementById('botonAgregarTarea');
const botonMostrarTareas = document.getElementById('botonMostrarTareas');
const allTasks = document.getElementById('allTasks');
const arrayTareas = [];

botonAgregarTarea.addEventListener('click', () => {
  arrayTareas.push({
    tarea: tarea.value,
    completada: completada.checked
  });

  alert(`Tarea ${tarea.value} agregada`);
});

botonMostrarTareas.addEventListener('click', () => {
  allTasks.innerHTML = '';
  arrayTareas.forEach(element => {
    allTasks.innerHTML += `<li>${element.tarea} - ¿Completada? -> ${element.completada} </li>`
  });
});

Tambien existe la opcion de usar

for (elemento in elementos) {
	// hacer algo
}
      const tasklist = document.getElementById('tasklist');
      const tasks = [
        {desc: 'Comprar pollo', day: 'hoy'},
        {desc: 'Limpiar habitación', day: 'mañana'},
        {desc: 'Recoger archivos', day: 'hoy'},
      ];
      tasks.forEach((e) => {
        tasklist.innerHTML += `<li><input type="checkbox"> ${e.desc}, ${e.day}</li>`;
      });

Esta es mi solución al reto. agregue una clase css para aplicar estilos y asi me quedo.

const app = document.getElementById("app");
        const tasks = [
            {title: "aprender javascript", completed: false},
            {title: "Limpiar la habitacion", completed: false},
            {title: "empezar el curso de arrays con javascript", completed: true},
        ];

        tasks.forEach(task => {
            app.innerHTML += `
                <div>
                    <input type="checkbox" ${task.completed && "checked"}/>
                    <span class="${task.completed && 'checked'}">${task.title}</span>   
                </div>
            `;
        })

Aqui esta mi reto

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="list"></div>
    <script>
      const tareas = [
        {title: 'Hacer la cama', hecha:true},
        {title: 'Lavar los trates', hecha:false},
        {title: 'Lavarse los dientes', hecha:true},
      ];
      const list = document.getElementById("list");
      tareas.forEach(tareas =>{
        list.innerHTML += `<li>${tareas.title} - ${tareas.hecha}</li>`;
      })
    </script>
</body>
</html>

Algo sencillo:

<script>
    const tasks =[
        {name: 'Wake Up', done: true},
        {name: 'Get Up', done: true},
        {name: 'Go to the Gym', done: true},
        {name: 'Make breakfast', done: true},
        {name: 'Go to Work', done: false},
        {name: 'Lunch', done: false},
        {name: 'Meeting ', done: false},
        {name: 'Go home', done: false},
        {name: 'Study English', done: false},
        {name: 'Make and eat dinner', done: false},
        {name: 'Sleep', done: true},

    ];
    const lisTasks = document.getElementById('list');
    tasks.forEach(listT =>{
        lisTasks.innerHTML +=`<li>
                                Name: ${listT.name}
                                <input type='checkbox'${listT.done?'checked':''}/>
                            </li>`

    });

</script>
Una pregunta que navegador se puede utilizar para ejecutar el programa si tengo en mi computadora un sistema operativo windows
mi solución al reto, simple que cumple los requisitos, espero les sea de ayuda `<html lang="en">` `<head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title></head>` ``<body>   
    <script>        //lo mismo que el codigo de la clase solo que se le agrega al objeto la propiedad de checkbox y el dato de la fecha y en el dom se crea el elemento input de tipo checkbox para que el forecah liste los objetos del array        const tasks = [            { name_task: 'Comer', date: '2024-04-01', checkbox: false },            { name_task: 'Estudiar', date: '2023-05-30', checkbox: true },            { name_task: 'entrenar', date: '2023-08-30', checkbox: false }        ]        const app = document.getElementById('app')        tasks.forEach(task => {            app.innerHTML += `
  • La tarea: ${task.name_task}, debe completarse el dia: ${task.date} completada: <input type="checkbox" ${task.checkbox ? 'checked' : ''}>
  • `        })    </script>`` `</body>` `</html>`
    Para este reto quise hacer una condicional, para poder saber si una tarea estaba o no completa !! ```js tasks.forEach(task => { if(task.status === true){ app.innerHTML += `

    ${task.nameTask}

    Has completado la tarea: ${task.nameTask} ✅ ` }else{ app.innerHTML += `

    ${task.nameTask}

    Aun no has completado la tarea: ${task.nameTask} ❌ ` } }) ```

    Mi solucion: ```js const tasks = [ { number: 'tarea #1: ', name: 'completar la lista', check: false}, { number: 'tarea #2: ', name: 'descansar', check: true} ] const app1 = document.querySelector('.list-task') tasks.forEach(task => { app1.innerHTML += `
  • ${task.number}${task.name} <input type="checkbox" ${task.check ? 'checked' : ''}>
  • ` }) ```const tasks = \[ { number: 'tarea #1: ', name: 'completar la lista', check: false}, { number: 'tarea #2: ', name: 'descansar', check: true}]const app1 = document.querySelector('.list-task')tasks.forEach(task => { app1.innerHTML += `\
  • ${task.number}${task.name} \<input type="checkbox" ${task.check ? 'checked' : ''}>\
  • ` })
    mi solucion: ``const tasks = [ { number: 'tarea #1: ', name: 'completar la lista', check: false}, { number: 'tarea #2: ', name: 'descansar', check: true}]const app1 = document.querySelector('.list-task')tasks.forEach(task => { app1.innerHTML += `
  • ${task.number}${task.name} <input type="checkbox" ${task.check ? 'checked' : ''}>
  • ` })``
    Presento mi solución al deber \
    \
    ```js
    const taskListArray = [ { tarea: "Ir al Gym", checked: true }, { tarea: "Notificar renuncia", checked: true }, { tarea: "Valer gaver", checked: false }, { tarea: "Comprar regalo de cumpleaños", checked: true }, ]; const taskList = document.getElementById("task-list"); taskListArray.forEach((task) => { taskList.innerHTML += `
  • ${task.tarea} <input type="checkbox" ${ task.checked ? "checked" : "" }/>
  • `; }); ```
    Dejo mi aporte humildemente: ![](https://static.platzi.com/media/user_upload/image-5be1474c-d338-43b4-8330-c871840b96c2.jpg)
    Dejo mi aporte humildemente ` const tasks = [ ` `{title:'clean code', check:true},            {title:'Running tasks', heck:false},            {title:'Debugging code',check:false},            ` `{title:'Building code', check:true}` `        ];` ``        const app = document.getElementById('app');        products.forEach(product => app.innerHTML += `
  • ${product.title} - ${product.price}
  • `);        const myTasks = document.getElementById('app');        tasks.forEach((task) => {            myTasks.innerHTML += `               
                       

    ${task.title}

                        <input type="checkbox" ${task.check? 'checked' : ''}>                   

    ${task.check? 'Tarea realizada' : 'Tarea por realizar'}

                   
                `;        });``
    ![](https://static.platzi.com/media/user_upload/image-f7e93ef4-1177-4ec0-93af-288e07f02bef.jpg)
    ```js const tareas = [ { titulo: "Bañarse", estado: "checked" }, { titulo: "Desayunar", estado: "checked" }, { titulo: "Trabajar", estado: "checked" }, { titulo: "GYM", estado: "" }, { titulo: "Cenar", estado: "" }, { titulo: "Estudiar", estado: "" } ] const todo = document.getElementById("todo") tareas.forEach(tarea => { todo.innerHTML += `
  • ${tarea.titulo} <input type="checkbox" ${tarea.estado === "checked" ? "checked" : ""}>
  • ` }) ```

    No sabia como empezar pero era sencillo 😃

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div id="app"></div>
        <script>
            const task = [
                {
                    task: 'tarea 1',
                    description: 'LimpiarMesa',
                    done: false,
                },
                {
                    task: 'tarea 2',
                    description: 'LavarPlatos',
                    done: true,
                },
                {
                    task: 'tarea 3',
                    description: 'pasearMascota',
                    done: true,
                },
                {
                    task: 'tarea 4',
                    description: 'deberesEscolares',
                    done: false,
                },
            ];
    
            const app = document.getElementById('app');
            task.forEach(task => {
                app.innerHTML += `<li>
                    Tarea: ${task.task} ||
                    Descripción: ${task.description} - <input type="checkbox" ${task.done ? 'checked' : ''}/>
                    </li>`
            });
        </script>
    </body>
    </html>
    
    ```js
    const tasks = [ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ]; const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `
  • <input type="checkbox" checked>${task.title} - ${task.status}
  • `; }else{ app.innerHTML += `
  • <input type="checkbox">${task.title} - ${task.status}
  • `; } }); ```
    ```js
    const tasks = [ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ]; const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `
  • <input type="checkbox" checked>${task.title} - ${task.status}
  • `; }else{ app.innerHTML += `
  • <input type="checkbox">${task.title} - ${task.status}
  • `; } }); ``` \
    \
    const tasks = \[ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ]; const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `\
  • \<input type="checkbox" checked>${task.title} - ${task.status} \\
  • `; }else{ app.innerHTML += `\
  • \<input type="checkbox">${task.title} - ${task.status} \\
  • `; } });
    Mi solución al reto `
    const tasks = [ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ];` `` const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `
  • <input type="checkbox" checked>${task.title} - ${task.status}
  • `; }else{ app.innerHTML += `
  • <input type="checkbox">${task.title} - ${task.status}
  • `; } });``
    Mi solución al reto ```html
    const tasks = [ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ]; const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `
  • <input type="checkbox" checked>${task.title} - ${task.status}
  • `; }else{ app.innerHTML += `
  • <input type="checkbox">${task.title} - ${task.status}
  • `; } }); ``` \
    \
    const tasks = \[ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ]; const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `\
  • \<input type="checkbox" checked>${task.title} - ${task.status} \\
  • `; }else{ app.innerHTML += `\
  • \<input type="checkbox">${task.title} - ${task.status} \\
  • `; } });
    Mi solución al reto \
    \
    const tasks = \[ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ]; const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `\
  • \<input type="checkbox" checked>${task.title} - ${task.status} \\
  • `; }else{ app.innerHTML += `\
  • \<input type="checkbox">${task.title} - ${task.status} \\
  • `; } });
    Mi solución al reto ```js
    const tasks = [ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ]; const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `
  • <input type="checkbox" checked>${task.title} - ${task.status}
  • `; }else{ app.innerHTML += `
  • <input type="checkbox">${task.title} - ${task.status}
  • `; } }); ``` \
    \
    const tasks = \[ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ]; const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `\
  • \<input type="checkbox" checked>${task.title} - ${task.status} \\
  • `; }else{ app.innerHTML += `\
  • \<input type="checkbox">${task.title} - ${task.status} \\
  • `; } }); ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-06-06%20a%20la%28s%29%2009.58.00-aac2d052-6f04-44a2-88c6-5acdcb807071.jpg)
    ```js
    <script> const tasks = [ { title: 'Documentation', status: 'done'}, { title: 'Debug', status: 'incomplete'}, { title: 'Programing', status: 'doing'} ]; const app = document.getElementById('app'); tasks.forEach(task => { if(task.status === 'done') { app.innerHTML += `
  • <input type="checkbox" checked>${task.title} - ${task.status}
  • `; }else{ app.innerHTML += `
  • <input type="checkbox">${task.title} - ${task.status}
  • `; } }); </script> ``` ![](https://static.platzi.com/media/user_upload/Captura%20de%20Pantalla%202024-06-06%20a%20la%28s%29%2009.55.48-c3a1fb6f-ac72-4462-a695-4d645fd35f35.jpg)
    Hola a todos, este s mi aporte ```js <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body>
    <script> const tasks = [ { title: 'Hacer mercado', state: 1}, { title: 'Medicina Teodoro', state: 0}, { title: 'Salida Candelaria', state: 1} ] const app = document.getElementById('app') tasks.forEach(e => { e.state == 1 ? app.innerHTML += (`
  • <input type="checkbox" checked ><label>${e.title}</label>
  • `) : app.innerHTML += (`
  • <input type="checkbox"><label>${e.title}</label>
  • `) }) </script> </body> </html> ```\\<html *lang*="en">\<head> \<meta *charset*="UTF-8"> \<meta *http-equiv*="X-UA-Compatible" *content*="IE=edge"> \<meta *name*="viewport" *content*="width=device-width, initial-scale=1.0"> \<title>Document\</title>\</head>\<body> \
    \
    \<script> *const* tasks = \[ { title: 'Hacer mercado', state: 1}, { title: 'Medicina Teodoro', state: 0}, { title: 'Salida Candelaria', state: 1} ] *const* app = document.getElementById('app') tasks.forEach(*e* => { e.state == 1 ? app.innerHTML += (`\
  • \<input type="checkbox" checked >\<label>${e.title}\</label>\
  • `) : app.innerHTML += (`\
  • \<input type="checkbox">\<label>${e.title}\</label>\
  • `) }) \</script>\</body>\</html>
  • ![]()![](https://static.platzi.com/media/user_upload/image-310fe10a-eed3-4557-8ed0-d2f56517ddf3.jpg)
    Así quedo ![](https://static.platzi.com/media/user_upload/image-51864885-0657-4ee9-bfeb-995f385943ed.jpg) ```js const tarea = [ { title: 'Cocinar', estado: false}, { title: 'Hacer ejercicio', estado: true}, { title: 'Estudiar', estado: 'true'}, { title: 'Trabajar', estado: false}, { title: 'Pasar tiempo con mi familia', estado: 'true'}, { title: 'Limpiar', estado: false}, ] const listaDeTareas = document.getElementById('lista'); tarea.forEach( item => { const li = document.createElement('li'); if(item.estado) { li.classList.add('true') li.textContent = `Tarea: ${item.title} - Estado: Completo` } else { li.classList.add('false') li.textContent = `Tarea: ${item.title} - Estado: Pendiente` } lista.appendChild(li) }) ```
    ```js const tarea = [ { title: 'Cocinar', estado: false}, { title: 'Hacer ejercicio', estado: true}, { title: 'Estudiar', estado: 'true'}, { title: 'Trabajar', estado: false}, { title: 'Pasar tiempo con mi familia', estado: 'true'}, { title: 'Limpiar', estado: false}, ] const listaDeTareas = document.getElementById('lista'); tarea.forEach( item => { const li = document.createElement('li'); if(item.estado) { li.classList.add('true') li.textContent = `Tarea: ${item.title} - Estado: Completo` } else { li.classList.add('false') li.textContent = `Tarea: ${item.title} - Estado: Pendiente` } lista.appendChild(li) }) ```const tarea = \[            { title: 'Cocinar', estado: false},            { title: 'Hacer ejercicio', estado: true},            { title: 'Estudiar', estado: 'true'},            { title: 'Trabajar', estado: false},            { title: 'Pasar tiempo con mi familia', estado: 'true'},            { title: 'Limpiar', estado: false},        ]         const listaDeTareas = document.getElementById('lista');         tarea.forEach( *item* => {             const li = document.createElement('li');             if(*item*.estado) {                li.classList.add('true')                li.textContent = `Tarea: ${*item*.title} - Estado: Completo`            } else {                li.classList.add('false')                li.textContent = `Tarea: ${*item*.title} - Estado: Pendiente`            }             lista.appendChild(li)        })
    La tarea ![](https://static.platzi.com/media/user_upload/image-0e748812-039f-4f4d-a7e1-0a2a081106a7.jpg) ```js <script> const tarea = [ { title: 'Cocinar', estado: false}, { title: 'Hacer ejercicio', estado: true}, { title: 'Estudiar', estado: 'true'}, { title: 'Trabajar', estado: false}, { title: 'Pasar tiempo con mi familia', estado: 'true'}, { title: 'Limpiar', estado: false}, ] const listaDeTareas = document.getElementById('lista'); tarea.forEach( item => { //crear un li const li = document.createElement('li'); //agregar el estilo correspondiente if(item.estado) { li.classList.add('true') li.textContent = `Tarea: ${item.title} - Estado: Completo` } else { li.classList.add('false') li.textContent = `Tarea: ${item.title} - Estado: Pendiente` } lista.appendChild(li) }) </script> ```\<script>        const tarea = \[            { title: 'Cocinar', estado: false},            { title: 'Hacer ejercicio', estado: true},            { title: 'Estudiar', estado: 'true'},            { title: 'Trabajar', estado: false},            { title: 'Pasar tiempo con mi familia', estado: 'true'},            { title: 'Limpiar', estado: false},        ]         const listaDeTareas = document.getElementById('lista');         tarea.forEach( *item* => {            *//crear un li*            const li = document.createElement('li');             *//agregar el estilo correspondiente*            if(*item*.estado) {                li.classList.add('true')                li.textContent = `Tarea: ${*item*.title} - Estado: Completo`            } else {                li.classList.add('false')                li.textContent = `Tarea: ${*item*.title} - Estado: Pendiente`            }             lista.appendChild(li)        })    \</script>
    El método forEach() ejecuta la función indicada una vez por cada elemento del array. A comparación del for nos puede servir para reducir las líneas de código. ![](https://static.platzi.com/media/user_upload/image-10156acb-881f-4430-80ee-172f60d75d3c.jpg)
    hola..como hacen para clonar, yo tengo dias intentando y da error, y le hice un fork en git y no tiene la carpeta de cliente ni server
    listo ![](https://static.platzi.com/media/user_upload/image-22f418d0-64b2-4d12-a96a-64ff873c643c.jpg) este es el codigo ```js //html
    //js const tarea = [ { trabajo: "definir diceño ", precio: 241 }, { trabajo: "definir funcionalidades", precio: 241 }, { trabajo: "definir base de datos", precio: 241 }, { trabajo: "definir arquitectura", precio: 241 }, ] const lista = document.getElementById("lista") tarea.forEach(tarea => { lista.innerHTML += `

    ${tarea.trabajo} ${tarea.precio} <input type="checkbox">

    ` }) ```
    ```js const tasks = [ { title: "Estudiar en Platzi", done: true }, { title: "Codificar App", done: false }, ]; const app = document.getElementById('app'); tasks.forEach((t) => { app.innerHTML += ` <input value="1" ${t.done ? 'checked' : ''} type="checkbox">${t.title} - ${t.done}</input> `; }); ```
    ```js const task = document.getElementById('task'); const setArray = [ { title: 'Programar', status: false, priority: 'Alta' }, { title: 'Escombrar', status: false, priority: 'Media' }, { title: 'Bañarse', status: false, priority: 'Baja' } ]; setArray.forEach(taskItem => { const checkbox = document.createElement('input'); checkbox.type = 'checkbox'; checkbox.name = 'task'; checkbox.value = taskItem.title; checkbox.checked = taskItem.status; checkbox.addEventListener('change', function() { taskItem.status = this.checked; console.log(`${taskItem.title} status changed to: ${this.checked}`); }); const label = document.createElement('label'); label.textContent = `${taskItem.title} prioridad: ${taskItem.priority}`; const br = document.createElement('br'); // Salto de línea entre checkboxes task.appendChild(checkbox); task.appendChild(label); task.appendChild(br); }); ```Este es mi código lo hice con lo aprendido en cursos anteriores, ya que solucionarlo como nos enseñó recientemente no pude resolverlo por que aun no estoy familiarizado con la sintaxis y el orden
    ```js ```
    Lo hice de esta manera, algo simple, pero efectivo: ```js const Agend =[ {title: 'Activation routine', state: 'Complete'}, {title: 'Exercise', state: 'Complete'}, {title: 'Study Dev', state: 'Complete'}, {title: 'Multitasking', state: 'Pending'}, {title: 'Work', state: 'Pending'}, {title: 'Read Book', state: 'Complete'}, {title: 'English Practice', state: 'Pending'}, ]; const app=document.getElementById('app'); Agend.forEach(item =>{ if(item.state === 'Complete'){ app.innerHTML+=`
  • <input type="checkbox" value="" checked='checked'>${item.title}
  • `; }else{ app.innerHTML+=`
  • ${item.title} - ${item.state}
  • `; } }) ```

    <!DOCTYPE html>
    <html lang=“en”>
    <head>
    <meta charset=“UTF-8” />
    <meta name=“viewport” content=“width=device-width, initial-scale=1.0” />
    <title>Document</title>
    </head>
    <body>
    <div id=“app”></div>
    <script>
    const app = document.getElementById(“app”);

      let tareas = [
        { tarea: "Hacer la cama", estado: "hecho" },
        { tarea: "limpiar la cocina", estado: "hecho" },
        { tarea: "Estudiar", estado: "hecho" },
      ];
    
      tareas.forEach((tarea) => {
        app.innerHTML += `<input type="checkbox">${tarea.tarea} ${tarea.estado}</input type="checkbox">`;
      });
    </script>
    

    </body>
    </html>

    ```js const reto = document.querySelector('.reto'); const tasks = [ {name:'Desayunar', description:'Primera comida del dia', completed: false}, {name:'Entrenar', description:'Realizar actividad física', completed: true}, {name:'Ducharse', description:'Tomar un baño corto', completed: true}, {name:'Estudiar Js', description:'Seguir un curso en Platzi', completed: true}, {name:'Dormir', description:'Relajarse en la habitación', completed: false}, ]; tasks.forEach((task)=>{ reto.innerHTML += ` <label for="${task.name}">${task.description}</label> <input id="${task.name}" type= "checkbox" ${task.completed ? 'checked' : ''}/> `; }); ```Una solución simple aplicando lo aprendido en esta clase Hay que recordar tener en el html un div con la clase seleccionada en Js, en este caso con la clase reto ```js
    ```
    Por lo general he utilizado la extension de VSC Live Server y es rápida , para mí funciona muy bien sin tener que instalar otra Librería por node. Sin embargo, no se si luego sea necesario. Por ahora funciona y es mas práctica.
    Hola, esta es mi solucion al ejercicio: ```js const app = document.getElementById('app'); const tasks = [ {title: 'Tarea uno', completed: false}, {title: 'Tarea dos', completed: false}, {title: 'Tarea tres', completed: true}, {title: 'Tarea cuatro', completed: false}, {title: 'Tarea cinco', completed: true}, ]; tasks.forEach(({ title, completed }) => { const element = `
  • <input type="checkbox" id="${title}" name="${title}" ${completed ? 'checked' : ''}> <label for="${title}">${title}</label>
  • `; app.innerHTML += element; }); ```const app = document.getElementById('app');         const tasks = \[            {title: 'Tarea uno',    completed: false},            {title: 'Tarea dos',    completed: false},            {title: 'Tarea tres',   completed: true},            {title: 'Tarea cuatro', completed: false},            {title: 'Tarea cinco',  completed: true},        ];         tasks.forEach(({ title, completed }) => {            const element = `                \
  •                     \<input type="checkbox" id="${title}" name="${title}" ${completed ? 'checked' : ''}>                    \<label for="${title}">${title}\</label>                \
  • `;                        app.innerHTML += element;        });

    Hice el array y le agregue otras propiedades como prioridad y fecha limite, así quedo.

    ![]()

    <script>
            const tasks = [
                {title: 'Call my mom', date: new Date(2024, 0, 16), priority: '🔥', completed: true}, 
                {title: 'Do the dishes', date: new Date(2024, 0, 16), priority: '⚖️', completed: true},
                {title: 'Workout', date: new Date(2024, 0, 17), priority: '🔥', completed: false},
                {title: 'Go shopping', date: new Date(2024, 0, 18), priority: '❄️', completed: false}
            ]
    
            const taskPlanner = document.getElementById('task-planner');
            tasks.forEach(task => {
                taskPlanner.innerHTML += 
                `<li>
                    <input type='checkbox' name='${task.title}' 
                         ${task.completed && 'checked'} id=''>
                    <label for='${task.title}'>${task.title} - Priority: ${task.priority}</label>
                    <time datetime='${task.date}'>- Deadline: ${task.date.toLocaleDateString('en-US')}</time>
                </li>`;
            });
        </script>
    
    Mi solucion al reto: ![](https://s13.gifyu.com/images/SjJyN.png) Resultado: ![](https://s13.gifyu.com/images/SjJyI.png)

    reto completado

    const tareasDelDia = [
        {tarea: 'leer', hecha: true},
        {tarea: 'estirar', hecha: false},
        {tarea: 'gym', hecha: true},
        {tarea: 'desayunar', hecha: false},
    ]
    
    tareasDelDia.forEach( tarea => {
        if (tarea.hecha) {
            app.innerHTML +=
            `<li> 
               la tarea es ${tarea.tarea} <input type="checkbox" checked>
            </li>`
        } else {
            app.innerHTML +=
            `<li> 
            la tarea es ${tarea.tarea} <input type="checkbox">
            </li>`
        }
    })
    
    Mi solucion al ejercicio: ```js let arr = [ {title: "Cepillarme", estado: true}, {title: "Estudiar", estado: true}, {title: "Bañarme", estado: false}, {title: "Comer", estado: false}, ] arr.forEach(tarea => { if (tarea.estado == true) { divTarea.innerHTML += `
  • ${tarea.title} - <input type="checkbox" checked>
  • ` } else { divTarea.innerHTML += `
  • ${tarea.title} - <input type="checkbox">
  • ` } }) ```
    Hola a todos, comparto mi codigo de ejemplo usando forEach ```js students.forEach((student) => { const divInput = document.createElement("div"); const nameStudent = document.createElement('h1'); const divSubject = document.createElement("ul"); nameStudent.textContent = `${student.name}`; student.workathome.forEach((subject) => { const textLi = document.createElement("li"); const textInput = document.createElement("input"); textInput.type = "checkbox"; textLi.textContent = `${subject}`; divSubject.appendChild(textLi); textLi.appendChild(textInput); }); divstudents.appendChild(divInput); divInput.appendChild(nameStudent); divInput.appendChild(divSubject); }); ```Hola a todos, comparto mi codigo de ejemplo usando forEach
    ```js ```Hola a todos, comparto mi codigo de ejemplo usando forEach :) ````js students.forEach((student) => { const divInput = document.createElement("div"); const nameStudent = document.createElement('h1'); const divSubject = document.createElement("ul"); nameStudent.textContent = `${student.name}`; student.workathome.forEach((subject) => { const textLi = document.createElement("li"); const textInput = document.createElement("input"); textInput.type = "checkbox"; textLi.textContent = `${subject}`; divSubject.appendChild(textLi); textLi.appendChild(textInput); }); divstudents.appendChild(divInput); divInput.appendChild(nameStudent); divInput.appendChild(divSubject); }); ```students.forEach((student) => { const divInput = document.createElement("div"); const nameStudent = document.createElement('h1'); const divSubject = document.createElement("ul"); nameStudent.textContent = `${student.name}`; student.workathome.forEach((subject) => { const textLi = document.createElement("li"); const textInput = document.createElement("input"); textInput.type = "checkbox"; textLi.textContent = `${subject}`; divSubject.appendChild(textLi); textLi.appendChild(textInput); }); divstudents.appendChild(divInput); divInput.appendChild(nameStudent); divInput.appendChild(divSubject);}); ````
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        
        <div id="app"></div>
        <script>
    
            const app = document.getElementById("app")
            const tareas = [
                {tarea :"caminar"},
                {tarea :"correr"},
                {tarea :"nadar"},
                {tarea :"comer"}
            ]
    
            tareas.forEach(tarea => {
                app.innerHTML += `<li> ${tarea.tarea} <input type="checkbox">  </li>`        })
    
        </script>
        
    </body>
    </html>
    

    mientras menos operaciones hagamos directamente en el DOM mejoraremos nuestro performance debido a que el motor V8 trabajar eficientemente con arreglos que con NodeList.
    Ademas trabajar con innerHTML provoca brechas de seguridad; lo recomendable es usar Fragment para hacer una sola carga en el DOM e innerText, de esta manera estamos aplicando buenas practicas.

    Mi solución al reto:

    		<script>
    			const tareas = [
    				{
    					name: "Terminar el curso",
    					checked: false,
    					description: "Manipulacion de arrays con JS",
    				},
    				{
    					name: "Comprar la comida de mis gatas",
    					checked: true,
    					description: "Tigresa, Kitty, Niebla,Zoe y Bagui",
    				},
    				{
    					name: "Arreglar la bici",
    					checked: false,
    					description: "Le fallan los pedales",
    				},
    			];
    			const container = document.getElementById("container");
    			const createTask = (name, status, description) => {
    				const task = document.createElement("div");
    				if (status) {
    					const content = `
              <div style="display:flex">
                <input type="checkbox" checked>
                <h2>${name}</h2>
              </div>
              <div>
                <p>${description}</p>
              </div>
            `;
    					task.innerHTML = content;
    					return task;
    				} else {
    					const content = `
              <div style="display:flex">
                <input type="checkbox">
                <h2>${name}</h2>
              </div>
              <div>
                <p>${description}</p>
              </div>
            `;
    					task.innerHTML = content;
    					return task;
    				}
    			};
    			tareas.forEach((tarea) => {
    				const newTask = createTask(
    					tarea.name,
    					tarea.checked,
    					tarea.description
    				);
    				container.appendChild(newTask);
    			});
    		</script>
    	</body>
    </html>
    
    
    Reto resuelto ```js const tasks = [ {name:'Completar reto', status:true}, {name:'Terminar tarea', status:false}, {name:'Dar de comer a blanca', status:true}, {name:'Limpiar casa', status:false} ] const app = document.getElementById('app'); // Imprimiendo un objeto con for each products.forEach(product =>{ app.innerHTML += `
  • ${product.title} - ${product.price}
  • ` }) const daily = document.getElementById('daily') tasks.forEach(task =>[ daily.innerHTML += `
  • ${task.name} - <input type="checkbox" ${task.status ? 'checked' : false}>
  • ` ]) ```    const tasks = \[                {name:'Completar reto', status:true},                {name:'Terminar tarea', status:false},                {name:'Dar de comer a blanca', status:true},                {name:'Limpiar casa', status:false}            ]             const app = document.getElementById('app');            *// Imprimiendo un objeto con for each*            products.forEach(product =>{                app.innerHTML += `\
  • ${product.title} - ${product.price}\
  • `            })             const daily = document.getElementById('daily')            tasks.forEach(task =>\[                daily.innerHTML += `\
  • ${task.name}  - \<input type="checkbox" ${task.status ? 'checked' : false}> \
  • `            ])
    Hola les dejo mi solucion ```js const app = document.getElementById('app'); const listTask = document.createElement('ul'); app.append(listTask); const addItem = (task) => { const taskItem = document.createElement('li'); const taskIscomplete = document.createElement('input'); taskIscomplete.type = "checkbox"; taskIscomplete.checked = task.isComplete; taskItem.innerText = `${task.task}`; taskItem.append(taskIscomplete); return taskItem }; const listTaskContent = [ { task:"Levantarse", description:"pendiente de las tareas pendientes", isComplete:true }, { task:"Comprar Aguacates", description:"Mirar que esten en buen estado", isComplete:false }, { task:"Comprar Papas", description:"Revisar que esten lo mas frescas posibles", isComplete:false }, { task:"Cocinar una salsa de aguacate con papas", description:"Con los ingredientes revisar como poder mejorar la receta", isComplete:false }, ]; listTaskContent.forEach( task => listTask.append(addItem(task)) ); ```

    Buen dia compañeros este es mi aporte y si tienen alguna duda no duden en dejarla en los comentarios para ayudarlos.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div id="app"></div>
        <script>
            const works = [
                {title: 'Study Programming', status: 'Incomplete'},
                {title: 'Work in Delivery', status: 'Incomplete'},
                {title: 'Study English', status: 'Incomplete'},
                {title: 'See mu series', status: 'Incomplete'},
            ];
            const app = document.getElementById('app');
            works.forEach(work => {
                const listItem = document.createElement('li');
                listItem.innerHTML = `${work.title} - <span>${work.status}</span>`;
    
                const checkbox = document.createElement('input');
                checkbox.type = 'checkbox';
                checkbox.checked = work.status === 'Complete';
    
                checkbox.addEventListener('change', () => {
                    work.status = checkbox.checked ? 'Complete' : 'Incomplete';
                    listItem.querySelector('span').textContent = work.status;
                });
    
                listItem.appendChild(checkbox);
                app.appendChild(listItem);
            });
    
        </script>
    </body>
    </html>
    
    Una pregunta cuando utilizo el insertAdjacentHTML en el ejercicio no se ve nada en el HTML cuando ejecuto npx http-server client/ Pero puedo visualizar el resultado cuando utilizo el live server de visual studio code ???

    Mi solución:)

    <div id="app"></div>
        <script>
            const toDo = [ //arrays
                {task: "Homework University", status: ""},//object
                {task: "Class English", status: ""},
                {task: "Class Platzi", status: ""},
                {task: "Practice JavaScript", status: ""},
            ];
    
            const app = document.getElementById("app");
            toDo.forEach(toDoList => {
                app.innerHTML +=`<li>${toDoList.status} <input type="checkbox"> ${toDoList.task}</li>`;
            });
        </script>
    

    Aca esta mi solución al reto:
    CODIGO JS

    const tareas = [
      { name: "Despertarse", estado: true },
      { name: "Estudiar", estado: true },
      { name: "Trabajar", estado: true },
      { name: "Estudiar x2", estado: false },
      { name: "Dormir", estado: false },
    ];
    
    const lista = document.querySelector("#listaDeTareas");
    
    tareas.forEach((tarea) => {
      const liElement = document.createElement("li");
      liElement.innerHTML = tarea.name;
    
      const inputElement = document.createElement("input");
      inputElement.type = "checkbox";
      if (tarea.estado == true) {
        inputElement.checked = true;
      }
    
      lista.appendChild(liElement);
      liElement.appendChild(inputElement);
    });
    

    CODIGO HTML

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Desafio forEach</title>
      </head>
      <body>
        <header>
          <nav>
            <p>desafio</p>
          </nav>
        </header>
        <main>
          <h1>LISTA DE TAREAS</h1>
          <ul id="listaDeTareas"></ul>
        </main>
        <script src="./index.js"></script>
      </body>
    </html>
    

    Mi respectiva solución al reto final de la clase:

    const tareas = 
    [
        {nombre: "Ingles", estado: "incompleta"},
        {nombre: "Literatura", estado: "completa"},
        {nombre: "Sociales", estado: "completa"}
    ]
    
    const app = document.querySelector("#app");
    tareas.forEach(tarea => {
        app.innerHTML += `<li >${tarea.nombre} - ${tarea.estado} <input type="checkbox" ${tarea.estado === 'completa' ? 'checked' : ''}> </li>`;
    });
    

    Mi solución al reto, estamos poco a poco aprendiendo así que quizás no es mucho pero me estoy esforzando.

    const activities = [
                { name: 'Áctivity1', description: 'Make ice cream', ready: 'checked' },
                { name: 'Áctivity2', description: 'Cook pastel', ready: 'checked' },
                { name: 'Áctivity3', description: 'Make the dinner', ready: '' },
                { name: 'Áctivity4', description: 'Drink water', ready: 'checked' },
                { name: 'Áctivity5', description: 'Go to class', ready: '' },
            ];
            const app = document.getElementById('app');
            activities.forEach(activity => {
                app.innerHTML += `<li>
                                    <input id="${activity.name}" name="${activity.name}" type="checkbox" ${activity.ready}>
                                    ${activity.description}
                                </li>`;
            })
    

    Ejercicio solucionado !!!
    Codigo

    Render

    Acá les dejo mi solución al reto 💚:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <div id="app"></div>
      <div id="tasks"></div>
      <script>
        // Mostrar elementos de un array al usuario
        const products = [ 
          {title: 'Burger', price: 121},
          {title: 'Pizza', price: 20}
        ];
        const app = document.getElementById('app');
        products.forEach(product => {
          app.innerHTML += `<li>${product.title} --> $${product.price}</li>`
        });
    
        // Mostrar elementos CheckBox de un array al usuario
        const tasks = [ 
          {title: 'Wash dishes', completed: true},
          {title: 'Cook dinner', completed: false},
          {title: 'Walk the dog', completed: true},
          {title: 'Brush my teeth', completed: false},
          {title: 'Do my homework', completed: true}
        ];
        const task = document.getElementById('tasks');
        tasks.forEach(item => {
          task.innerHTML += `
            <p>
              <input type="checkbox" id="${item.title}" ${item.completed && 'checked'}>
              ${item.title}
            </p>`
        });
      </script>
    </body>
    </html>
    

    mi aporte

    const tasks = [
              {content: 'Learn array manipulation', state: true},
              {content: 'Learn React', state: false},
              {content: 'Learn Tailwind', state: true},
              {content: 'Move the little hands', state: false},
            ]
            // creamos una veriable con let y dentro creamos una lista desordenada
            let nodes = document.createElement('ul');
            // Seleccionamos el contenedor por su id 'App'
            const app = document.getElementById('App');
            // hacemos un forEach y creamos una lista por cada elemento del array con un check inicializado con un booleano
            // al final envolvemos todo en un label para hacer click en cualquier parte del parrafo y marcar el check
            tasks.forEach(tasks => {
              const element =
              `<li>
                <label>
                  <input type="checkbox" ${tasks.state ? 'checked' : ''}/> 
                ${tasks.content}
                <label/>
              </li>`
              // cambiamos el valor del elemento asignandole el resultado por cada vuelta de for y lo insertamos al html
              nodes.innerHTML += element
            })
            // insertamos el array de objetos en el contenedor y lo renderizamos al html para que se muestre la info 
            App.append(nodes)
    

    Aquí dejo mi código

    
    

    <code>

    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE-edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <div id="app"></div> 
        <script>
            const tasks = [
                { task: 'Washing my clothes', status: true },
                { task: 'Cleaning my room', status: false },
                { task: 'Cooking the lunch', status: true },
                { task: 'Fixing my motorcycle', status: false },
                { task: 'Studing to the exam', status: true },
                { task: 'Go to the job', status: true }
            ];
            const app = document.getElementById('app');
            tasks.forEach(task => {
                app.innerHTML += `<li>${task.task} - ${task.status}</li>`;
            })
        </script>
    </body>
    </html>
    

    Mi solucion:

    <!DOCTYPE html>
    <html lang="es">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Tasks</title>
    </head>
    <body>
    
        <main>
    
            <div id="app">
    
            </div>
    
        </main>
    
        <script>
    
            const tareas = [
                {
                    title: 'Tarea 1',
                    descripcion: 'Crear un ejemplo de tarea.',
                    completada: true
                },
                {
                    title: 'Tarea 2',
                    descripcion: 'Ir por tortillas a la tienda.',
                    completada: false
                },
                {
                    title: 'Tarea 3',
                    descripcion: 'Descripcion tarea 3.',
                    completada: true
                }
            ];
    
            const app = document.querySelector('#app');
    
            tareas.forEach(tarea => {
                app.innerHTML += (`
    
                                    <div>
                                        <h3>${tarea.title}</h3>
                                        <p>${tarea.descripcion}</p>
                                        <input type='checkbox' ${tarea.completada != false ? 'checked' : ''} >
                                    </div>
                
                `)
            });
    
        </script>
    </body>
    </html>
    

    Hice que el estado de la tarea se encontrara en un div al lado, que cambia cada que el checkbox de la tarea es seleccionado.

    Si no saben inglés, no sean chismosos y no traduzcan mis tareas.

    <body>
        <div id="app"></div>
        <script>
            const tasks = [{
                    description: 'Do homework',
                    status: 'in progress'
                },
                {
                    description: 'P with myself',
                    status: 'in progress'
                },
                {
                    description: 'meet with friends',
                    status: 'In progress'
                },
                {
                    description: 'P with myself',
                    status: 'in progress'
                },
                {
                    description: 'P with myself',
                    status: 'in progress'
                },
                {
                    description: 'P with myself',
                    status: 'in progress'
                },
    
            ];
            const app = document.getElementById('app');
            tasks.forEach((task, index) => {
                app.innerHTML +=
                    `<div class="checkbox-container"><label class="task"><input class="checkbox" id="checkbox-${index}" type="checkbox"></label> ${task.description} - <div style="display:inline" class="status">${task.status}</div> </div> `;
            });
            const container = document.querySelector('#app');
    
            container.addEventListener('click',(e)=>{
                if(e.target.classList.contains('checkbox')){
                    const status = e.target.parentElement.parentElement.querySelector('.status');
                    if(e.target.checked){
                        status.textContent = 'Done';
                    }
                    else if(!(e.target.checked)){
                        status.textContent = 'In progress';
                    }
                }
            })
        </script>
    </body>
    

    La tarea me la aventé haciendo que los checkbox hagan que cambie el div con clase status a la derecha de cada tarea.
    Igual y le dediqué más tiempo del que debería.

    <body>
        <div id="app"></div>
        <script>
            const tasks = [{
                    description: 'Do homework',
                    status: 'in progress'
                },
                {
                    description: 'whack off',
                    status: 'in progress'
                },
                {
                    description: 'meet with friends',
                    status: 'In progress'
                },
                {
                    description: 'whack off',
                    status: 'in progress'
                },
                {
                    description: 'whack off',
                    status: 'in progress'
                },
                {
                    description: 'whack off',
                    status: 'in progress'
                },
    
            ];
            const app = document.getElementById('app');
            tasks.forEach((task, index) => {
                app.innerHTML +=
                    `<div class="checkbox-container"><label class="task"><input class="checkbox" id="checkbox-${index}" type="checkbox"></label> ${task.description} - <div style="display:inline" class="status">${task.status}</div> </div> `;
            });
            const container = document.querySelector('#app');
    
            container.addEventListener('click',(e)=>{
                if(e.target.classList.contains('checkbox')){
                    const status = e.target.parentElement.parentElement.querySelector('.status');
                    if(e.target.checked){
                        status.textContent = 'Done';
                    }
                    else if(!(e.target.checked)){
                        status.textContent = 'In progress';
                    }
                }
            })
        </script>
    </body>