从Vuex中的数组中删除项目

时间:2018-04-07 21:15:47

标签: vuex

我刚开始使用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

3 个答案:

答案 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数组的元素,则有时会objundefined

您可以简化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开始