您好,也许有更好的方法,但是我想用响应数据替换与某个索引匹配的对象。我目前正在尝试在forEach()中使用splice(),但是它不能替换对象,只会删除它们。
我正在使用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
})
});
},
答案 0 :(得分:1)
无需使用splice()
,您只需将特定的数组元素重新分配给新的对象值即可。
在id
数组上也没有像checkedEngagements
这样的属性,您需要特定的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})
})