Necesito ayuda para este ejercicio:
métodos de matriz
Implemente la función uncompletedNotes que, dada una matriz de notas, devuelve solo las notas incompletas. Una nota se considera completada si todas las tareas pendientes tienen el indicador de hecho establecido en verdadero.
Esto es lo que he hecho:
function uncompletedNotes(notes) { let result = [] notes.forEach(element => { if (element.todos.done == false) { result.push(element); } }); return result; } const notes = [{ id: 1, description: 'Workout program', todos: [{ id: 1, name: 'Push ups - 10 x 3', done: false }, { id: 2, name: 'Abdominals - 20 x 3', done: true }, { id: 3, name: 'Tapis Roulant - 15min', done: true } ] }, { id: 2, description: 'Front-end Roadmap', todos: [{ id: 1, name: 'Learn HTML', done: true }, { id: 2, name: 'Learn CSS', done: true }, { id: 3, name: 'Learn JavaScript', done: true }, { id: 4, name: 'Learn Angular', done: true } ] } ] const notesInProgress = uncompletedNotes(notes); console.log('All notes: ', notes); console.log('Notes In Progress: ', notesInProgress);Pero me da un resultado de matriz vacío en Notes in Progress.
function uncompletedNotes(notes) { return notes.filter(note => note.todos.filter(todo => !todo.done)) }El problema aquí es que la propiedad todos de cada nota es en sí misma una matriz, es decir, no hay una propiedad done en todos . Puede ser útil mirar los métodos de matriz every o some (probablemente some ), que devolverán verdadero si algún elemento en un iterable devuelve verdadero para una condición dada.
function uncompletedNotes(notes) { let result = [] notes.forEach(element => { if(element.todos.some(todo => todo.done === false)) { result.push(element); } }); return result; }Todos también es una matriz, por lo que también tendría que iterar sobre esa