#javascript #foreach #vuex
Вопрос:
У меня есть объект с именем ObjectX, подобный этому
{
"test": [
{
"id": "de6b4d1c-6e04-46a1-908b-9ed5c78e1boc",
},
{
"id": "de6b4d1c-6e04-46a1-908b-9ed5c78e1boc",
},
{
"id": "de6b4d1c-6e04-46a1-908b-9ed5c78e1boc",
},
{
"id": "de6b4d1c-6e04-46a1-908b-9ed5c78e1boc",
},
{
"id": "de6b4d1c-6e04-46a1-908b-9ed5c78e1boc",
},
{
"id": "de6b4d1c-6e04-46a1-908b-9ed5c78e1boc",
}
],
}
и я хочу обновить идентификатор для всех моих объектов в моем тестовом массиве.
Чтобы сделать это, я делал
objectX.test.forEach((obj) => {
obj.id = newId
})
Но с моим предплечьем у меня есть это
Error: "[vuex] do not mutate vuex store state outside mutation handlers."
Кто-нибудь знает, как я могу обновить свои идентификаторы, не получив подобной ошибки ?
Комментарии:
1. Учитывая, что вы используете vuex, вам, вероятно, придется показать более полный пример вашего кода, потому что на самом деле вы спрашиваете не о самом JavaScript, а о том, как это сделать в контексте этой библиотеки.
Ответ №1:
Вы не можете обновлять внутри каждого объекта, потому что вы обновляете копию объекта, а не сам объект. Вместо этого вы можете map
просмотреть свой массив и вернуть обновленный массив в другую переменную:
const objectX = {
test: [{ name: 'a', id: 4 }, { name: 'b', id: 2 } ],
};
const newId = 1;
objectX.test = objectX.test.map((obj) => {
return {
...obj,
id: newId,
}
});
console.log(objectX.test);