我刚开始使用Vuex但是遇到了问题(这可能是我的一些无能的语法错误)。我有一个带有likes_items的用户,并且有一个与项目不同的网络呼叫。
mutations: {
SET_TOGGLE_LIKED: (state, { global_id }) => {
alert('here is global_id: ' + global_id)
state.user.liked_items.find((obj,i) => {
if(obj.global_id === global_id){ // no global_id
console.log('that exists at i: ' + i + ' with length: ' + state.user.liked_items.length)
state.user.liked_items.splice(i, 1)
console.log('that exists at i: ' + state.user.liked_items.length)
}else{
console.log('that doesnot exist!')
}
})
}
我遇到的问题是,从likes_items列表中删除一个项目后,这似乎被召回,我得到一个错误,即global_id在undefined上不存在。
我可以通过以下方式解决:
state.user.liked_items.find((obj,i) => {
if(obj){
if(obj.global_id === global_id){
但为什么我需要检查这里是否存在obj
?
答案 0 :(得分:1)
我们还可以使用地图将对象的index
存储在存储阵列中,并使用以下方法将其删除:
突变
REMOVE_OBJECT_FROM_ARRAY: (state, payload) => {
let i = state.someArrayofObjects.map(item => item.id).indexOf(payload.id);
state.someArrayofObjects.splice(i, 1);
}
在这里,id
是将有效负载传递给MUTATION
的ID,我们也只能将id
作为整个payload
传递。在这种情况下,我们可以执行以下操作:
REMOVE_OBJECT_FROM_ARRAY: (state, payload) => {
let i = state.someArrayofObjects.map(item => item.id).indexOf(payload);
state.someArrayofObjects.splice(i, 1);
}
答案 1 :(得分:0)
如果您有undefined
数组作为liked_items
数组的元素,则有时会obj
为undefined
。
您可以简化if
,如下所示:
state.user.liked_items.find((obj,i) => {
if(obj && obj.global_id === global_id){
或者可以预先过滤数组以仅保留非undefined
值:
state.user.liked_items.filter(o => o).find((obj,i) => {
if(obj.global_id === global_id){
答案 2 :(得分:-1)
您可以使用以下变体,它使用Javascript数组方法中的splice
。
deleteElement: function(state.element) {
state.myArray.splice(this.events.indexOf(element), 1);
}
如果您知道该元素的索引,它将变为(显然):
deleteElement: function(state,elementIndex) {
state.myArray.splice(elementIndex, 1);
}
“ 1”是要删除的元素数,从elementIndex开始