#javascript #arrays #reactjs #json
Вопрос:
Я работаю над приложением react, в котором я получаю ответ JSON от маршрута, который в основном представляет собой список объектов JSON.
Теперь я хочу добавить поле в каждый объект JSON в соответствии с другим полем в этом объекте JSON:
Вот мой ответ:
{
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,
},
];
}
Теперь я хочу вставить поле с именем mString
status "A"
, в котором указан статус того же объекта.Я хочу вставить его в каждый объект в приведенном выше массиве.Как я могу это сделать?
Ответ №1:
Просто зациклите массив и добавьте
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);
Ответ №2:
В React я бы предложил обычно использовать неизменяемый шаблон обновления, в котором вы возвращаете новый массив со свойствами объекта элемента, которые вы хотите. Это использует 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);
Ответ №3:
Я не очень хорошо понял вас в последней части, но я думаю, что это то, чего вы хотите
object.messages.map(element=> {
element.mystring=el.status "A"
return element
}))
вам нужен доступ к «сообщениям» в вашем JSON с точечной нотацией
object.messages-это массив, в котором вы можете отобразить объекты внутри (карта)
Ответ №4:
Измените свой объект JSON с помощью метода forEach. Но если у вас огромный JSON, измените его на стороне BE, вместо этого используйте FE или используйте веб-работников для этой проблемы
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(item => { item['mString'] = `${item.status} A` });
console.log(data);
Комментарии:
1. Пожалуйста, укажите дополнительную информацию в своем ответе. Как это написано в настоящее время, трудно понять ваше решение.