问题描述
当这个对象已经存在时,我想更新 localStorage 选择的对象数量。它将在 else if 中更改触发器 handleAddCart 条件语句。 ***handleAddCart > else if
//this append function for concat
const appendToStorage = (name,data) => {
var prevItems = localStorage.getItem(name)
try{
prevItems = JSON.parse(prevItems);
} catch (e){
prevItems = []
}
localStorage.setItem(name,JSON.stringify(prevItems.concat(data)))
}
这是提交处理程序
const handleAddCart = () => {
//when there is no array stored
if (localStorage.getItem('cartList') === null) {
localStorage.setItem('cartList',JSON.stringify(cartList))
}
if (cartItem.size && cartItem.quantity) {
//1st when there is no array
if (!localData) {
appendToStorage('cartList',cartItem)
} else if (localData.some((item) => item.cartId === cartItem.cartId)) {
//when array contain same object
var itemPrice = localData.find((item) => item.cartId === cartItem.cartId);
} else {
//concat new object
appendToStorage('cartList',cartItem)
}
history.push('/shop')
setItemSize(null)
setSelectWarning(false);
} else{
setSelectWarning(true)
}
}
cartItem 是一个对象,cartList 是一个数组。 购物车项目是这样的-
CartItem = {
name: '',cartId: '',price: '',size: '',quantity: 1,img: ''
}
CartList = []
解决方法
var sameItem = JSON.parse(localStorage.cartList);
for(var i = 0;i < sameItem.length; i++){
if (cartItem.cartId === sameItem[i].cartId) {
sameItem[i].quantity += cartItem.quantity;
break;
}
}
localStorage.setItem('cartList',JSON.stringify(sameItem))