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