我将购物车存储在localStorage中。如果单击新产品,我想将其添加到购物车中。如果我再次单击同一产品,则要添加数量以避免重复输入。
我想遍历对象并检查对象的“ id”属性是否与发送给函数的“ Id”参数匹配。如果是这样,我想更新该对象的“数量”,否则创建一个新对象并添加到“购物车”中。现在,我循环检查每个属性是否与“ Id”参数匹配。
这是对象上的样子:
{id:Id, qty: Qty, price: Price}
这是功能:
handleAdd =(Id, Qty, Price) =>{
var newCart=[]
var cart = JSON.parse(window.localStorage.getItem('Cart'))
if(cart !== null){
for(var x in cart)
{
if(x.id === Id){
x.qty = Number(x.qty) + Number(Qty)
}
else{
var item = {id:Id, qty: Qty, price: Price}
newCart.push(item)
}
}
}else{
newCart= {id:Id, qty: Qty, price: Price}
}
window.localStorage.setItem('Cart', JSON.stringify(newCart))
}
答案 0 :(得分:1)
编辑:刚刚意识到,如果购物车已存储在我的示例代码中,则不会添加该商品,但购物车中不存在该商品
您不需要从现有的购物车中构建新的购物车,只需使用存储中已有的购物车即可。像这样:
handleAdd = (Id, Qty, Price) => {
let cart = JSON.parse(window.localStorage.getItem('Cart'));
// Track if item is already present
let itemPresent = false;
if(cart !== null){
for(let i=0; i< cart.length; i++)
{
if (cart[i].id === Id) {
cart[i].qty = Number(cart[i].qty) + Number(Qty);
itemPresent = true;
break;
}
}
// If item wasn't present, add it to cart
if (itemPresent === false) {
cart.push({id:Id, qty: Qty, price: Price});
}
} else {
cart = [{id:Id, qty: Qty, price: Price}];
}
window.localStorage.setItem('Cart', JSON.stringify(cart));
}
将来的问题包括您当前方法的行为是什么问题,收到的任何错误消息等。