对象的循环属性

时间:2018-09-12 12:29:39

标签: javascript reactjs loops local-storage

我将购物车存储在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))
}

1 个答案:

答案 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));
}

将来的问题包括您当前方法的行为是什么问题,收到的任何错误消息等。