我无法在localStorage中使用索引

时间:2019-07-18 06:04:15

标签: javascript reactjs

我想做购物车。当我单击项目时,它会推送到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));
  }
}

1 个答案:

答案 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

应该可以