从Vuex中的阵列中删除项目

从Vuex中的阵列中删除项目,vuex,Vuex,我刚刚开始使用Vuex,但遇到了一个问题(这可能是我自己的语法错误)。我有一个用户,他喜欢某个项目,并且有一个网络呼叫,该呼叫与某个项目不同 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 === globa

我刚刚开始使用Vuex,但遇到了一个问题(这可能是我自己的语法错误)。我有一个用户,他喜欢某个项目,并且有一个网络呼叫,该呼叫与某个项目不同

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!')
   }
 })
}
我遇到的问题是,从liked_items列表中删除一个项目后,该项目似乎被召回,我得到一个错误,即未定义的项目上不存在全局_id

我可以通过以下方式进行修复:

 state.user.liked_items.find((obj,i) => {
   if(obj){
     if(obj.global_id === global_id){

但是为什么我需要在这里检查
obj
的存在?

如果
未定义的
作为
喜欢的项目的元素
数组,有时会得到
obj
作为
未定义的

如果
,您可以简化您的
,如下所示:

 state.user.liked_items.find((obj,i) => {
   if(obj && obj.global_id === global_id){
或者可以对数组进行预筛选,以仅保留未定义的值:

 state.user.liked_items.filter(o => o).find((obj,i) => {
   if(obj.global_id === global_id){

我们还可以使用映射获取存储数组中对象的
索引
,并使用以下方法将其删除:

突变

REMOVE\u OBJECT\u FROM\u ARRAY:(状态,有效负载)=>{
const i=state.someArrayofObjects.map(item=>item.id).indexOf(payload.id);
说明某些阵列对象拼接(i,1);
}
这里,
id
是与有效载荷一起传递给
变异的id,我们也可以只传递整个
有效载荷的
id
。在这种情况下,我们可以这样做:

REMOVE\u OBJECT\u FROM\u ARRAY:(状态,有效负载)=>{
const i=state.someArrayofObjects.map(item=>item.id).indexOf(有效负载);
说明某些阵列对象拼接(i,1);
}

您可以使用以下变异,它使用Javascript数组方法中的
拼接

deleteElement: function(state.element) {
  state.myArray.splice(this.events.indexOf(element), 1);
}
如果您知道元素的索引,它将(显然)变成:


“1”是要删除的元素数,从elementIndex开始,谢谢,但是为什么不使用
findIndex(item=>item.id==payload)
?非常感谢。为什么这不适用于过滤器?感谢您的回答,我们应该添加一个条件来检查索引是否存在,以避免在(i!=-1){state.someArrayofObjects.splice(removeIndex,1);}中删除所有类似的项
这并没有回答以下问题:
为什么我需要在此处检查obj的存在?
您正在查找对象的索引以便删除它,但您没有检查对象的存在。问题是
为什么我需要在此处检查obj的存在?
deleteElement: function(state,elementIndex) {
  state.myArray.splice(elementIndex, 1);
}