我正在创建一个客户端购物车。添加的产品保存在本地存储中,但如果产品数量已添加到本地存储中,如何增加产品数量?我有将产品添加到本地商店的功能,在这个功能中我增加数量,但产品变得重复。
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));
}
答案 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));