Aquí estoy tratando de almacenar el nombre de la identificación y la cantidad de veces que se ha hecho clic.
Se almacena como un objeto, pero cuando probé JSON.Stringify() devuelve una matriz vacía como esta '[]'
if (localStorage.getItem('cart') == null) { var cartArr = {}; } else { cartArr = JSON.parse(localStorage.getItem('cart')); } const cartClass = document.querySelectorAll(".cart"); cartClass.forEach((ele) => { ele.addEventListener('click', (e) => { let cartId = (e.target.getAttribute('id')); if (cartArr[cartId] == undefined) { cartArr[cartId] = 1; } else { cartArr[cartId] += 1; } localStorage.setItem('cart', JSON.stringify(cartArr)); console.log(localStorage.getItem('cart')); }); });Tu código debería funcionar. Nunca almacenó una matriz en ese código. ¿Quizás tiene otro código que almacenó el carrito como una matriz?
Delegaría y le daría al sistema un poco de tiempo para reaccionar
const cartStr = localStorage.getItem('cart') cartArr = cartStr ? JSON.parse(cartStr) : {} const cartContainer = document.getElementById("cartContainer"); cartContainer.addEventListener('click', (e) => { const tgt = e.target.closest(".cart"); if (tgt) { let cartId = tgt.id; cartArr[cartId] = cartArr[cartId] ? cartArr[cartId] : 0; cartArr[cartId]++; localStorage.setItem('cart', JSON.stringify(cartArr)); setTimeout(function() { console.log(localStorage.getItem('cart')) }, 10); // give the system time to react } });He comprobado tu código, funciona correctamente. Su problema se puede resolver limpiando su localStorage . Parece que en algún momento almacenó una matriz vacía en su almacenamiento local. Lo que sucede es que JSON.stringify almacena el contenido de la matriz, pero ignora cualquier propiedad personalizada que establezca en un objeto de matriz:
// This will log "[]" const arr = []; arr.prop = "val" console.log(JSON.stringify(arr)); // This will log {"prop": "val"} const obj = {}; obj.prop = "val" console.log(JSON.stringify(obj));