Как обновить массив корзины, если у вас есть несколько объектов в корзине в соответствии с условиями?

#javascript #local-storage #e-commerce #cart #webshop

#javascript #локальное хранилище #электронная коммерция #Корзина #интернет-магазин

Вопрос:

Я новичок в JS. У меня есть сведения о продукте в виде объектов. Мне нужно обновить массив корзины по щелчку,

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

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

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

Но когда я нажимаю (с тем же именем и с той же линзой), предполагается обновить количество элементов (с тем же именем и с той же линзой). но он обновляет только количество index [0] .
Как я должен это решить?

Это мой массив корзины

 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 amp;amp; 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 amp;amp; 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:

Не зная слишком много о потребностях вашего приложения, вот базовая реализация обновления коллекции.

 // 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)
  

Этот тип приложений обычно обрабатывается API. Но это определенно укажет вам правильное направление