Javascript 我无法在本地存储中使用的索引

Javascript 我无法在本地存储中使用的索引,javascript,reactjs,Javascript,Reactjs,我想做一辆购物车。当我单击某个项目时,它会推送到localStorage 但是当我第二次单击时,它应该被删除,所以我需要该项目的索引 我的localStorage是一个对象数组,但当我想获取项目的索引时,它返回-1。有什么问题 addToShoppingCard(e,服务){ e、 预防默认值(); 让oldItems=JSON.parse(sessionStorage.getItem('basket'))| |[]; 让parent=e.target.parentNode; parent.cl

我想做一辆购物车。当我单击某个项目时,它会推送到localStorage 但是当我第二次单击时,它应该被删除,所以我需要该项目的索引

我的localStorage是一个对象数组,但当我想获取项目的索引时,它返回
-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)
。这是假设它是一个对象,因为您说我的本地存储是一个对象数组。