Обновление объекта javascript в ForEach?

#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);