Estoy trabajando en una aplicación de reacción en la que obtengo una respuesta JSON de una ruta que es básicamente una lista de objetos JSON.
Ahora quiero agregar un campo en cada objeto JSON de acuerdo con otro campo en ese objeto JSON:
Aquí está mi respuesta:
{ messages: [ { msgId: "2021082111010755885", interfaceId: 5, status: "QUEUED", createdAt: "2021-08-21 11:01:07.89554", modifiedAt: "2021-08-21 11:01:07.89554", count: 0, }, { msgId: "2021082012204615964", interfaceId: 5, status: "QUEUED", createdAt: "2021-08-20 12:20:46.187297", modifiedAt: "2021-08-20 12:31:06.622", count: 5, }, { msgId: "2021082012204575430", interfaceId: 5, status: "QUEUED", createdAt: "2021-08-20 12:20:46.187297", modifiedAt: "2021-08-20 12:27:06.473", count: 3, }, { msgId: "2021082012204613152", interfaceId: 5, status: "QUEUED", createdAt: "2021-08-20 12:20:46.187297", modifiedAt: "2021-08-20 12:28:06.517", count: 3, }, ]; } Ahora quiero insertar un campo llamado mString que es status+"A" donde el estado es del mismo objeto. Quiero insertarlo en cada objeto de la matriz anterior. ¿Cómo puedo hacer esto?
Simplemente recorra la matriz y agregue
const data = { "messages": [ { "msgId": "2021082111010755885", "interfaceId": 5, "status": "QUEUED", "createdAt": "2021-08-21 11:01:07.89554", "modifiedAt": "2021-08-21 11:01:07.89554", "count": 0, }, { "msgId": "2021082012204615964", "interfaceId": 5, "status": "QUEUED", "createdAt": "2021-08-20 12:20:46.187297", "modifiedAt": "2021-08-20 12:31:06.622", "count": 5, }, { "msgId": "2021082012204575430", "interfaceId": 5, "status": "QUEUED", "createdAt": "2021-08-20 12:20:46.187297", "modifiedAt": "2021-08-20 12:27:06.473", "count": 3, }, { "msgId": "2021082012204613152", "interfaceId": 5, "status": "QUEUED", "createdAt": "2021-08-20 12:20:46.187297", "modifiedAt": "2021-08-20 12:28:06.517", "count": 3, } ] } data.messages.forEach((node) => node.mString = node.status + "A"); console.log(data);En React, sugeriría generalmente usar un patrón de actualización inmutable en el que devuelve una nueva matriz con las propiedades del objeto del elemento que desea. Esto usa Array.prototype.map .
const newData = { ...data, messages: data.messages.map(el => ({ ...el, mString: el.status + "A", })), }; const data = { messages: [ { msgId: "2021082111010755885", interfaceId: 5, status: "QUEUED", createdAt: "2021-08-21 11:01:07.89554", modifiedAt: "2021-08-21 11:01:07.89554", count: 0, }, { msgId: "2021082012204615964", interfaceId: 5, status: "QUEUED", createdAt: "2021-08-20 12:20:46.187297", modifiedAt: "2021-08-20 12:31:06.622", count: 5, }, { msgId: "2021082012204575430", interfaceId: 5, status: "QUEUED", createdAt: "2021-08-20 12:20:46.187297", modifiedAt: "2021-08-20 12:27:06.473", count: 3, }, { msgId: "2021082012204613152", interfaceId: 5, status: "QUEUED", createdAt: "2021-08-20 12:20:46.187297", modifiedAt: "2021-08-20 12:28:06.517", count: 3, }, ], }; const newData = { ...data, messages: data.messages.map(el => ({ ...el, mString: el.status + "A", })), }; console.log(newData);no te entendi muy bien en la ultima parte pero creo que esto es lo que quieres
object.messages.map(element=> { element.mystring=el.status + "A" return element }))su necesidad de acceder a "mensajes" en su JSON con notación de puntos
object.messages es una matriz en la que puede mapear los objetos dentro ( mapa )