Javascript 我无法在本地存储中使用的索引
我想做一辆购物车。当我单击某个项目时,它会推送到localStorage 但是当我第二次单击时,它应该被删除,所以我需要该项目的索引 我的localStorage是一个对象数组,但当我想获取项目的索引时,它返回Javascript 我无法在本地存储中使用的索引,javascript,reactjs,Javascript,Reactjs,我想做一辆购物车。当我单击某个项目时,它会推送到localStorage 但是当我第二次单击时,它应该被删除,所以我需要该项目的索引 我的localStorage是一个对象数组,但当我想获取项目的索引时,它返回-1。有什么问题 addToShoppingCard(e,服务){ e、 预防默认值(); 让oldItems=JSON.parse(sessionStorage.getItem('basket'))| |[]; 让parent=e.target.parentNode; parent.cl
-1
。有什么问题
addToShoppingCard(e,服务){
e、 预防默认值();
让oldItems=JSON.parse(sessionStorage.getItem('basket'))| |[];
让parent=e.target.parentNode;
parent.classList.add('added');
让child=parent.childNodes;
子[0].classList.toggle('hidechose');
if(子[0].classList.contains('hidechose')){
设index=oldItems.indexOf(服务);
控制台日志(旧项);
控制台日志(服务);
控制台日志(索引);
}否则{
旧项目。推送(服务);
setItem('basket',JSON.stringify(oldItems));
}
}
在您的情况下,正如提图斯所说,您需要使用另一种方法来获取对象的索引。让我们猜测服务具有ID属性,然后尝试使用以下代码:
addToShoppingCard(e,服务){
e、 预防默认值();
让oldItems=JSON.parse(sessionStorage.getItem('basket'))| |[];
让parent=e.target.parentNode;
parent.classList.add('added');
让child=parent.childNodes;
子[0].classList.toggle('hidechose');
if(子[0].classList.contains('hidechose')){
让index=oldItems.findIndex(s=>s.id==service.id);
控制台日志(旧项);
控制台日志(服务);
控制台日志(索引);
}否则{
旧项目。推送(服务);
setItem('basket',JSON.stringify(oldItems));
}
}
或者,如果您正在按服务搜索它的name
,只需将findIndex
谓词函数替换为s=>s.name==service.name
在你的例子中,正如提图斯所说,你需要用另一种方法来获取对象的索引。让我们猜测服务具有ID属性,然后尝试使用以下代码:
addToShoppingCard(e,服务){
e、 预防默认值();
让oldItems=JSON.parse(sessionStorage.getItem('basket'))| |[];
让parent=e.target.parentNode;
parent.classList.add('added');
让child=parent.childNodes;
子[0].classList.toggle('hidechose');
if(子[0].classList.contains('hidechose')){
让index=oldItems.findIndex(s=>s.id==service.id);
控制台日志(旧项);
控制台日志(服务);
控制台日志(索引);
}否则{
旧项目。推送(服务);
setItem('basket',JSON.stringify(oldItems));
}
}
或者,如果您正在按服务搜索它的name
,只需将findIndex
谓词函数替换为s=>s.name==service.name
这应该行得通当你
控制台。log
旧项
和服务
?索引检查是否严格相等==
,这意味着如果服务
不是原语(字符串、数字等),indexOf
将返回-1
,因为oldItems
不能包含service
它可能包含与此对象具有相同属性和值的对象,但不能包含此对象本身。如果让oldItems=JSON.parse(sessionStorage.getItem('basket'))| |[]
返回字符串或数字数组,您只需检查所添加的服务是字符串类型还是数字类型。否则,请检查存储区是否确实保存了这些项目。控制台日志说明了什么?对象数组将不等于服务对象。它们不共享相同的内存位置。如果要通过服务中的值查找索引,可以使用.findIndex((serviceObj)=>serviceObj.someValue===service.someValue)
。这是假设它是一个对象,因为您说过我的本地存储是一个对象数组
。当您使用控制台时,您会得到什么。日志
旧项
和服务
?索引检查是否严格相等==
,这意味着如果服务
不是原语(字符串、数字等),indexOf
将返回-1
,因为oldItems
不能包含service
它可能包含与此对象具有相同属性和值的对象,但不能包含此对象本身。如果让oldItems=JSON.parse(sessionStorage.getItem('basket'))| |[]
返回字符串或数字数组,您只需检查所添加的服务是字符串类型还是数字类型。否则,请检查存储区是否确实保存了这些项目。控制台日志说明了什么?对象数组将不等于服务对象。它们不共享相同的内存位置。如果要通过服务中的值查找索引,可以使用.findIndex((serviceObj)=>serviceObj.someValue===service.someValue)
。这是假设它是一个对象,因为您说我的本地存储是一个对象数组。