如何更新localStorage中的数组对象?

问题描述

当这个对象已经存在时,我想更新 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))