如何从localStorage清除相同的对象并增加数量?

时间:2015-11-10 13:00:19

标签: javascript

我正在创建一个客户端购物车。添加的产品保存在本地存储中,但如果产品数量已添加到本地存储中,如何增加产品数量?我有将产品添加到本地商店的功能,在这个功能中我增加数量,但产品变得重复。

Product.prototype.addObjToLocalStore = function() {
    var obj = {
        'name': this.name,
        'qty': this.qty,
        'price': this.price,
        'total': this.getPrice()
    }
    var oldItems = JSON.parse(localStorage.getItem('itemsArray')) || [];

    for (k in oldItems) {
        if(oldItems[k].name == obj.name) {
            oldItems[k].qty += parseInt(obj.qty);
            localStorage.setItem('itemsArray', JSON.stringify(oldItems[k].qty));
        }
    }

    oldItems.push(obj);
    localStorage.setItem('itemsArray', JSON.stringify(oldItems));
}

2 个答案:

答案 0 :(得分:0)

好吧,不管你是否找到了这个项目,你都oldItems.push(obj),重复该项目。

所以在这种情况下我会做的不是使用数组,而是使用对象。对象的关键是项目的标识符(在您的情况下,名称),值是项目的属性(数量,价格等)。像这样:

Product.prototype.addObjToLocalStore = function() {
    // oldItems is an object, not an array
    var oldItems = JSON.parse(localStorage.getItem('itemsObject')) || {};
    // If it exists, grab its quantity. If not, 0.
    var oldQuantity = (oldItems[this.name] && oldItems[this.name].qty) || 0;
    var obj = {
        'name': this.name,
        'qty': oldQuantity + this.qty,
        'price': this.price,
        'total': this.getPrice()
    }

    // Replace the old entry with the new.
    // If doesn't exist, will be created.
    oldItems[this.name] = obj;

    // We're done here. Store the new object.
    logalStorage.setItem('itemsObject', JSON.stringify(oldItems));
};

答案 1 :(得分:-1)

如果您不想复制您的对象,请删除最后两行:

 oldItems.push(obj);
 localStorage.setItem('itemsArray', JSON.stringify(oldItems));