Tengo la siguiente matriz de objetos:
[{ idChatPublic: "1", message: "hello", chatLike: [{ id: "1", idChatPublic: "1" }] }]Lo que quiero es simplemente agregar un nuevo objeto en la matriz chatLike. Aquí está mi intento, pero no parece estar funcionando. ¿Qué pasa con este fragmento de código?
async function sendLike(messageId: string) { const newLike = { idChatPublic: messageId, } mutateMessages( (data) => { console.log(data) // returns the array I want to update data.map((message) => { if (message.idChatPublic === messageId) { console.log(message.chatLike) // returns the array inside the object I want to update return { ...message, chatLike: [...message.chatLike, newLike] } } else { return message } }) } ) }El método map() crea una nueva matriz con los resultados de llamar a una función proporcionada en cada elemento de la matriz de llamadas.
Probablemente, debe crear const con una nueva matriz y devolverla:
const newData = data.map((message) => { if (message.idChatPublic === messageId) { console.log(message.chatLike) // returns the array inside the object I want to update return { ...message, chatLike: [...message.chatLike, newLike] } } else { return message } }); return newData;No necesitas map() . Creo que puedes hacerlo así:
async function sendLike(messageId: string) { const newLike = { idChatPublic: messageId, }; mutateMessages((data) => { data.forEach((message) => { if (message.idChatPublic === messageId) { message.chatLike.push(newLike); } } }); } Repita la matriz de objetos con forEach() y, si la identificación coincide, puede actualizar la matriz chatLike con push() para agregar un nuevo objeto newLike .
const data = [ { idChatPublic: "1", message: "hello", chatLike: [ { id: "1", idChatPublic: "1", }, ], }, ]; function updateChatLike() { return data.map((d) => { return { ...d, chatLike: [ ...d.chatLike, { id: 2, idChatPublic: "2", }, ], }; }); } console.log(JSON.stringify(updateChatLike(), null, 4));He usado JSON.stringify() para registrar el objeto anidado completo
Producción
[ { "idChatPublic": "1", "message": "hello", "chatLike": [ { "id": "1", "idChatPublic": "1" }, { "id": 2, "idChatPublic": "2" } ] } ]