从Vuex中的阵列中删除项目
我刚刚开始使用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
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);
}