Estoy tratando de construir una tienda web básica y estoy buscando una forma de almacenar datos que ya tengo en una hoja de Excel en una matriz de JavaScript para poder almacenarlos en el almacenamiento local si el comprador hace clic en "Agregar al carrito", por ejemplo: Tengo estos datos aquí mismo:
['Hoodie','Purple','cotton authentic',' Only £39.99','images/items/hoodies/hoodie (1).jpg']
['Hoodie','Light Blue','cotton authentic',' Only £39.99','images/items/hoodies/hoodie (2).jpg']
['Hoodie','Green','cotton authentic',' Only £39.99','images/items/hoodies/hoodie (3).jpg']
como puedes ver, es el tipo de ropa, color, descripción, precio y fuente de la imagen
¿Cómo puedo almacenar esto en una matriz de JavaScript para poder crear una función que, al hacer clic en un botón, agregue el elemento específico en el almacenamiento local?
En primer lugar... desde el punto de vista de la estructura de datos, su solución es: interesante
['Hoodie','Purple','cotton authentic',' Only £39.99','images/items/hoodies/hoodie (1).jpg'] ['Hoodie','Light Blue','cotton authentic',' Only £39.99','images/items/hoodies/hoodie (2).jpg'] ['Hoodie','Green','cotton authentic',' Only £39.99','images/items/hoodies/hoodie (3).jpg']En general, en una matriz, desea tener varias cosas que sean todas del mismo tipo. Sí, aquí cada sudadera con capucha se representa como una matriz... y todos los elementos de cada matriz son cadenas... pero cada cadena representa un tipo de cosa completamente diferente.
Realmente, deberías usar objetos para guardar las sudaderas con capucha:
{ type: 'Hoodie', color: 'Purple', material: 'cotton authentic', price: '£39.99', image: 'images/items/hoodies/hoodie (1).jpg' }Ahora tienes una sola cosa que tiene atributos específicos, cada uno con un valor
Para mostrar todas sus sudaderas con capucha, tiene su matriz... pero ahora carga esa matriz con esos objetos en lugar de tener matrices separadas
var hoodieArray = [{ type: 'Hoodie', color: 'Purple', material: 'cotton authentic', price: '£39.99', image: 'images/items/hoodies/hoodie (1).jpg' }, { type: 'Hoodie', color: 'Light Blue', material: 'cotton authentic', price: '£39.99', image: 'images/items/hoodies/hoodie (2).jpg' }, { type: 'Hoodie', color: 'Green', material: 'cotton authentic', price: '£39.99', image: 'images/items/hoodies/hoodie (3).jpg' }]Ahora, tiene una forma de almacenar, dentro de una sola clave en localStorage, la matriz de objetos separados, cada uno con su lista de atributos simplemente pasando JSON.stringify(hoodieArray)
Si tiene la matriz en números y desea limpiarlos en una matriz de objetos.
Por ejemplo, digamos que tiene matrices como las siguientes:
let allArray = [ ['Hoodie', 'Purple', 'cotton authentic', ' Only £39.99', 'images/items/hoodies/hoodie (1).jpg'], ['Hoodie', 'Light Blue', 'cotton authentic', ' Only £39.99', 'images/items/hoodies/hoodie (2).jpg'], ['Hoodie', 'Green', 'cotton authentic', ' Only £39.99', 'images/items/hoodies/hoodie (3).jpg'] ]siempre que esté seguro de la posición de cada elemento en la matriz secundaria, el código a continuación transformará todo en una matriz de objetos.
allArray.forEach((element, index) => { let obj = {} obj.type = element[0] obj.color = element[1] obj.material = element[2] obj.price = element[3] obj.image = element[4] allArray[index] = obj })puedes echar un vistazo a lo que obtienes en la consola
console.log(allArray)entonces, puede agregar la matriz reformada al almacenamiento local de esta manera:
localStorage.setItem("mycart", JSON.stringify(allArray))Sin embargo, en un escenario ideal, los artículos se agregan al carrito uno a la vez. Para agregar un artículo a la vez, puede escribir una función para agregar un artículo al carrito y otra para obtener artículos del carrito como se indica a continuación
addToCart(item) { let items = getCartItem() items = items == null ? [] : items let found = items.find(x => x.somethingUnique == item.somethingUnique) if (found == null || undefined) { items.push(item) localStorage.setItem("mycart", JSON.stringify(items)) return true; } return false; }Nota
let found = items.find(x => x.somethingUnique == item.somethingUnique) Reemplace somethingUnique con cualquier cosa que sea única para cada objeto, como ID , etc. Esto es para verificar si un elemento ya existe en el carrito y, por lo tanto, evita duplicados con el código.
getCartItem() { let item = localStorage.getItem("mycart") item = item == null || undefined ? null : JSON.parse(item) return item; }Espero que esto ayude.