How to update cart array, when you have multiple objects in the cart according to conditions?

1.4k Views Asked by At

I'm new to JS. I have product details as objects. I need to update my cart array on the click,

if (cart=== null)=> qty = 1 => push to cart array ;
else if ( same name && same lense ) => updating qty+1; (bcz there is a item that fulfill that condition) ;

else if ( same name && different  lense ) => qty = 1;=> then push to cart array;

else  ( different name && different lense  ) => qty = 1;=> then push to cart array;

But when I push ( same name && same lense ), supposed to update ( same name && same lense )'s items qty. but it is updating the index[0]'s qty only. How should i solve this?

This is my cart array

let cart = JSON.parse(localStorage.getItem('productArray')) || [];``
> //new item object//
>//lense client has severel option//
const cartItem = {
    pic: singlePic.src,
    name: singleProductName.textContent,
    qty: 0,
    price: singleProductPrice,
    lense: "",
};
function addToCart() {
    //no item
    if (JSON.parse(localStorage.getItem('productArray')) == null) {
        //update the cart
        cartItem.qty = 1;
        //push to the cart
        cart.push(cartItem);
        localStorage.setItem('productArray', JSON.stringify(cart))
        // update the cart after the condition
        cart = JSON.parse(localStorage.getItem('productArray'))
    } else {
        // cart has some items
        for (let oldItem of cart) {
            if (cart.some(oldItem => oldItem.name === cartItem.name && oldItem.lense === cartItem.lense)) { oldItem.qty += 1
                // replace order with updated cart 
                localStorage.setItem("productArray", JSON.stringify(cart));
                cart = JSON.parse(localStorage.getItem("productArray"))
            }
            else if (cart.some(oldItem => oldItem.name === cartItem.name && oldItem.lense !== cartItem.lense)) {
                cartItem.qty = 1
                cart.push(cartItem)
                localStorage.setItem('productArray', JSON.stringify(cart))
                cart = JSON.parse(localStorage.getItem("productArray"))
            }
            else {
                cartItem.qty = 1
                cart.push(cartItem)
                localStorage.setItem('productArray', JSON.stringify(cart))
                cart = JSON.parse(localStorage.getItem("productArray"))

            }
        }
    }
1

There are 1 best solutions below

0
Jordan Quartermain On

Without knowing too much about your application needs, here's a basic implementation of updating a collection.

// Example cart array (typical data structure)
let cart = [
    {
        id: 1,
        name: "Product 1",
        quantity: 1
    },
    {
        id: 2,
        name: "Product 2",
        quantity: 2
    }
]

// Function to handle updates
const update_cart = ( id, quantity, name ) => {
    let item = cart.find( item => item.id === id )
    // Product is already in cart, need to increment
    if ( item ) { 
        item.quantity = item.quantity + quantity
    }
    // Product is not in cart, need to add it
    else {
        cart.push({
            id,
            name,
            quantity
        })
    }
}

// Update a product in the cart
update_cart(1, 2, "Product 1")
console.log(cart)

// Add a new product to the cart
update_cart(3, 2, "Product 3")
console.log(cart)

This type of application is usually handled by an API. But this will definitely point you in the right direction