matriz llamada 'notas' contiene 5 objetos, cada objeto tiene claves
var notes = [ { title: "Home", message: "is a good story", status: 'new', author:"dala", }, { title: "School", message: "Have to go everday", status: 'new', author:"aisha", }, { title: "study", message: "we have exam to pass", status: 'new', author:"Omar", }, { title: "Work", message: "dead line is close", status: 'new', author:"Said", }, { title: "homework", message: "as today we need to do it", status: 'new', author:"Amal", }, ];quiero actualizar el estado de todas las notas para que se 'completaran', el error es que el código solo actualiza el primer Objeto
function map(notes,callback){ const newNotes =[]; for(var i=0; i<notes.length; i++) { const result = callback(notes[i].status = "completed",i); newNotes.push(result); return newNotes; } } var outp = map(notes,function(value, i){ console.log(i) for(var a= 0; a<value.length; a++){ return notes; } }) console.log(outp);Estaba entrenando en la función de devolución de llamada, y este código de entrenamiento era la cara de un problema al escribir el código. Si tiene recursos útiles para aprender, compártalos conmigo.
No necesita escribir su propia función de map , Array.prototype.map ya hace lo que hace su función de map (y un poco más, pero eso no es relevante).
El problema es:
map return newNotes; dentro del ciclo for , por lo que regresa cuando el ciclo solo ha hecho uno de los elementos.map no está llamando a su devolución de llamada correctamente.map espera que haga.La llamada a su devolución de llamada debe ser simplemente:
const result = callback(notes[i], i); Y el return newNotes; debería estar después del bucle.
Luego, su devolución de llamada debería crear un nuevo objeto con las propiedades del objeto original pasado, más status: "completed" , tal vez usando un objeto literal con sintaxis extendida, como este:
const output = map(notes, function(note, index) { return {...note, status: "completed" }; });En la función de mapa, returned la matriz newNotes dentro del bucle for en lugar de después. Sin embargo, sugeriría usar la función de map incorporada.
var notes = [ { title: "Home", message: "is a good story", status: 'new', author:"dala", }, { title: "School", message: "Have to go everday", status: 'new', author:"aisha", }, { title: "study", message: "we have exam to pass", status: 'new', author:"Omar", }, { title: "Work", message: "dead line is close", status: 'new', author:"Said", }, { title: "homework", message: "as today we need to do it", status: 'new', author:"Amal", }, ]; function map(notes,callback){ const newNotes =[]; for(var i=0; i<notes.length; i++) { const result = callback(notes[i].status = "completed",i); newNotes.push(result); } return newNotes; } var outp = map(notes,function(value, i){ console.log(i) for(var a= 0; a<value.length; a++){ return notes; } }) console.log(outp);