在JavaScript中尝试从localStorage查找现有产品时出错

在JavaScript中尝试从localStorage查找现有产品时出错,javascript,reactjs,next.js,cart,Javascript,Reactjs,Next.js,Cart,我正在尝试使用localStorage实现一个购物车系统,下面是代码,我是如何实现的 const data = { description: "Cum sociis natoque", mediaUrl: "/products-img7.jpg", name: "Hearing Aid Device", newProduct: true, onOffer: "5", o

我正在尝试使用localStorage实现一个购物车系统,下面是代码,我是如何实现的

const data = {
    description: "Cum sociis natoque",
    mediaUrl: "/products-img7.jpg",
    name: "Hearing Aid Device",
    newProduct: true,
    onOffer: "5",
    onSale: true,
    price: "99.57",
    productType: "medical",
    sku: "534-20-2675",
    viewCount: 0,
    _id: "5f095b0bd7f2be792ee6ba1c",
}

const handleAddToCart = (data, quantity = 1) => {
    let getCarts = JSON.parse(localStorage.getItem('myCart'))
    let existed_item = null
    if(getCarts || getCarts != null){
        existed_item = getCarts.find(item => item._id == data._id) // Error in that line
    }

    if (existed_item) {
        let cartItem = Object.assign({}, existed_item, {quantity: (quantity + existed_item.quantity)})
        localStorage.setItem('myCart', JSON.stringify(cartItem))
    } else {
        let cartProducts = new Array()
        if(localStorage.getItem('myCart')){
            cartProducts = JSON.parse(localStorage.getItem('myCart'))
        }
        let dataWQty = Object.assign({}, data, {quantity: quantity});
        let newCartProducts = [...cartProducts, dataWQty]

        localStorage.setItem('myCart',JSON.stringify(newCartProducts));
    }
}
从上面的代码得到下面的错误

未处理的运行时错误
TypeError:getCarts.find不是函数
我现在如何克服这种情况?我真的很想帮你解决这个问题


提前感谢。

我认为您需要更改更新项目的逻辑,因为您首先获取数组,但在第一次更新数组时,您将使用对象替换它

let getCarts = JSON.parse(localStorage.getItem('myCart'))
let existed_item_index = -1
if(getCarts || getCarts != null){
    existed_item_index = getCarts.findIndex(item => item._id === data._id)
}

if (existed_item_index!==-1) {
    const updatedCarts = JSON.parse(JSON.stringify(getCarts));
    updatedCarts[existed_item_index].quantity += quantity;
    localStorage.setItem('myCart', JSON.stringify(updatedCarts));
}

我认为您需要在第一次获取数组时更改更新项的逻辑,但在第一次更新数组时,您将使用对象替换它

let getCarts = JSON.parse(localStorage.getItem('myCart'))
let existed_item_index = -1
if(getCarts || getCarts != null){
    existed_item_index = getCarts.findIndex(item => item._id === data._id)
}

if (existed_item_index!==-1) {
    const updatedCarts = JSON.parse(JSON.stringify(getCarts));
    updatedCarts[existed_item_index].quantity += quantity;
    localStorage.setItem('myCart', JSON.stringify(updatedCarts));
}


什么是
console.log(getCarts)就在调用
之前。是否查找
输出?可能它不是一个有效的数组,甚至根本不是数组。localStorage.getItem('myCart')
的结果是什么?@GhassenLouhaichi在控制台中精确显示“data”变量,如@上面粘贴的jesica
data
是一个对象,而不是数组,并且对象没有名为
find
的方法。在一个集合中,“myCart”是对象,而在另一个集合中,“myCart”是数组。当它的数组是一个对象时,find可以正常工作,但只有在这种情况下,您才会得到这个错误?什么是
console.log(getCarts)就在调用
之前。是否查找
输出?可能它不是一个有效的数组,甚至根本不是数组。localStorage.getItem('myCart')
的结果是什么?@GhassenLouhaichi在控制台中精确显示“data”变量,如@上面粘贴的jesica
data
是一个对象,而不是数组,并且对象没有名为
find
的方法。在一个集合中,“myCart”是对象,而在另一个集合中,“myCart”是数组。find在其数组时可以正常工作,但当它是一个对象时,只有在这种情况下才会出现此错误?我想你的意思是最后的
JSON.stringify(updatedCarts)
。感谢你的回答&我从你的代码中得到了一些更新,现在很好,你可以这样做,但在我看来,最好创建一个新对象,而不引用前一个对象,这样它就不会在前进中产生任何问题。你能告诉我为什么当我尝试获取对象计数时,它显示了一个很长的数字,就像数组中的一个对象显示的
60
something你所说的
尝试获取对象计数是什么意思吗object
如果您有其他问题,如果您可以添加另一个问题,那就太好了。我很乐意为您提供帮助。我想您最后的意思是
JSON.stringify(updatedCarts)
。感谢您的回答&我对您的代码进行了一些更新,现在很好,您可以这样做,但在我看来,最好创建一个新对象,而不引用前一个对象,这样它就不会在前进中产生任何问题。你能告诉我为什么当我尝试获取对象计数时,它显示了一个很长的数字,就像数组中的一个对象显示的
60
something你所说的
尝试获取对象计数是什么意思吗object
如果您有其他问题,可以再添加一个问题,那就太好了。我很乐意为您提供帮助