Можете ли вы использовать splice () внутри forEach ()? Vue Mutation - PullRequest
0 голосов
/ 03 ноября 2018

Здравствуйте, так что, возможно, есть лучший метод, но я хочу заменить объекты, которые соответствуют определенному индексу, моими данными ответа. В настоящее время я пытаюсь использовать splice () внутри forEach (), однако он не заменяет объекты, а только удаляет их.

Я использую Vue.js

Вот моя мутация

updateCheckedEngagements(state, checkedEngagements) {
  checkedEngagements.forEach((engagement) => {
  const index = state.engagements.findIndex((e) => e.id === engagement.id);
    state.engagements.splice(index, checkedEngagements.length, {
     'id': checkedEngagements.id,
     'client_id': checkedEngagements.client_id,
     'workflow_id': checkedEngagements.workflow_id,
     'return_type': checkedEngagements.return_type,
     'year': checkedEngagements.year,
     'assigned_to': checkedEngagements.assigned_to,
     'status': checkedEngagements.status,
     'done': false
     })
   });
  },

1 Ответ

0 голосов
/ 03 ноября 2018

Нет необходимости использовать splice(), вы можете просто переназначить определенный элемент массива на новое значение объекта.

Также в массиве checkedEngagements нет таких свойств, как id, вам нужен конкретный engagement экземпляр объекта

checkedEngagements.forEach((engagement) => {
  const index = state.engagements.findIndex((e) => e.id === engagement.id);
  // TODO: make sure index isn't -1 and return if it is

  // reassign that index to new object value
  state.engagements[index] = {
    'id': engagement.id,
    'client_id': engagement.client_id,
    'workflow_id': engagement.workflow_id,
    'return_type': engagement.return_type,
    'year': engagement.year,
    'assigned_to': engagement.assigned_to,
    'status': engagement.status,
    'done': false
  }
})

Альтернативный способ сделать это без ручной записи всех свойств вручную - использовать Object.assign()

checkedEngagements.forEach((engagement) => {
  const o = state.engagements.find((e) => e.id === engagement.id);
  Object.assign(o, engagement, {done:false}) 
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...