我想做购物车。当我单击项目时,它会推送到localStorage 但第二次单击时应将其删除,因此我需要indexOf该Item。
我的localStorage是一个对象数组,但是当我想获取我的商品的索引时,它返回-1
。有什么问题吗?
addToShoppingCard(e, service) {
e.preventDefault();
let oldItems = JSON.parse(sessionStorage.getItem('basket')) || [];
let parent = e.target.parentNode;
parent.classList.add('added');
let child = parent.childNodes;
child[0].classList.toggle('hideChoose');
if (child[0].classList.contains('hideChoose')) {
let index = oldItems.indexOf(service);
console.log(oldItems);
console.log(service);
console.log(index);
} else {
oldItems.push(service);
sessionStorage.setItem('basket', JSON.stringify(oldItems));
}
}
答案 0 :(得分:2)
就您的情况而言,正如Titus所说,您需要使用另一种方法来获取对象的索引。假设服务具有ID属性,然后尝试使用以下代码:
addToShoppingCard(e, service) {
e.preventDefault();
let oldItems = JSON.parse(sessionStorage.getItem('basket')) || [];
let parent = e.target.parentNode;
parent.classList.add('added');
let child = parent.childNodes;
child[0].classList.toggle('hideChoose');
if (child[0].classList.contains('hideChoose')) {
let index = oldItems.findIndex(s => s.id === service.id);
console.log(oldItems);
console.log(service);
console.log(index);
} else {
oldItems.push(service);
sessionStorage.setItem('basket', JSON.stringify(oldItems));
}
}
或者,如果您正在按服务搜索name
,只需将findIndex
谓词函数替换为s => s.name === service.name
。
应该可以