想知道如何更新 localStorage
中的数组obj当项目已经存在时,我的 localStorage
在刷新后创建一个新数组,而不是更新或添加新的obj。
localstorage obj-
cart - [{"Product":"Coke","Price":"1.99","Quantity":"1x "}]
addTocart函数在其中添加我将对象推到 array[]
var itemStorage = [];
for (var key in drinkCounter) {
...
var cartObj = { Product: key, Price: drinkCounter[key].price, Quantity: drinkCounter[key].count + 'x ' }
itemStorage.push(cartObj);
localStorage.setItem('cart', JSON.stringify(itemStorage));
...
}
这是一个JSFIDDLE,因此,一旦添加了一个项目并刷新页面并添加相同或新的项目,它会重新创建localStorage
,我该如何更新它而不是每次刷新页面时重新创建新的项目?
编辑 - 如果添加了同一项目,则应更新{Quantity:}
按照下面的答案,我尝试更新现有项目的项目数量,但是无效。有任何建议吗?
cartItems.forEach(function (item, i) {
if (item.Product == key) {
item.Quantity = drinkCounter[key].count;
// item.Quantity += 1; // or no avail
index = i;
}
});
固定的局部存储数量计数
if (index !== -1) {
cartItems[index].Quantity = parseInt(cartItems[index].Quantity) + 1 + 'x';
} else {
var cartObj = { Product: key, Price: drinkCounter[key].price, Quantity: drinkCounter[key].count + 'x ' }
cartItems.push(cartObj);
}
**编辑 - **关于总价格的快速问题,有人可以指出为什么当我添加一项时,当总价为 0
时,当时应该是物品价格
您无法避免串行localstorage数据。
var data = JSON.parse( localStorage.getItem('cart') );
for (var key in drinkCounter) {
...
// search for a product with current key
var index = -1;
data.forEach(function(item, i){
if( item.Product === key ) {
index = i;
}
});
if (index !== -1) {
// data[index] = cartObj;
data[index].Quantity = parseInt(data[index].Quantity.split(x)[0]) + drinkCounter[key].count + 'x ';
} else {
var cartObj = { Product: key, Price: drinkCounter[key].price, Quantity: drinkCounter[key].count + 'x ' };
data.push(cartObj);
}
...
}
localStorage.setItem('cart', JSON.stringify(data));