包含对象的数组,increasing/decreasing 单击按钮后对象中的值之一

Array with objects, increasing/decreasing one of the value in object after click on button

我真是菜鸟。我正在努力实施购物车,但我坚持使用其中一项功能。 将产品放入我的购物车(从本地存储)后,我想操纵每个产品的数量。

[
  {
    "name": "Havana",
    "price": 475,
    "inCart": 5
  },
  {
    "name": "Cubana",
    "price": 150,
    "inCart": 3
  },
  {
    "name": "Malibu",
    "price": 105,
    "inCart": 3
  }
]


getFromStorage(product);

function getFromStorage() {
    product = JSON.parse(localStorage.getItem("product"));
    console.log(product);
    product.forEach(({ name, price, inCart }) => {
    cart.innerHTML += `
<div>${name}</div>
<div>${price}</div>
<i class="fas fa-minus-square"></i>
<div class="in-cart">${inCart}</div>
<i class="fas fa-plus-square"></i>
    `
  })
}

显示我的购物车后,我想使用按钮来增加和减少 inCart 的价值

我已经开始将代码写入 increase/decrease inCart 的值,但我不知道如何访问元素。我想在本地存储中动态更新这个数量。

const decrease = document.querySelectorAll(".fa-minus-square");

for (let i = 0; i < decrease.length; i++) {
  decrease[i].addEventListener("click", () => {
    product = JSON.parse(localStorage.getItem("product"));

如果有人能帮助我,那就太好了!

首先,最好用ID来标识你的产品。产品对象可能如下所示:

{
    id: string,
    name: string,
    price: number,
    quantity: number,
}

函数 getFromStorage 似乎没问题,但为了更好的命名,我认为你应该将 product 重命名为 products,尽管如此它得到 0 个参数但是当你在第 0 行调用它时你提供一个参数。

getFromStorage();

function getFromStorage() {
    products = JSON.parse(localStorage.getItem("product"));
    console.log(product);
    products.forEach(({ id, name, price, inCart }) => {
    cart.innerHTML += `
      <div>${name}</div>
      <div>${price}</div>
      <i class="fas fa-minus-square" onClick=`handleQuantityChange(${id},-1)`></i>
      <div class="in-cart">${inCart}</div>
      <i class="fas fa-plus-square"></i>
    `
  })
}

最终函数 handleQuantityChange 将获得 2 个参数:产品 ID 和差异。您将来可能会使用相同的功能,但使用“1”第二个参数来处理 increase

function handleQuaintityChange(id, diff){
   const product = products.find(prod=>prod.id===id);
   if(!product) return;
   product.quantity+=diff;
   return true
}