Ini adalah kode untuk menambahkan produk ke troli ketika pengguna mengklik tombol tambahkan ke troli

 addToCart(){
      var cart = []
      var cartObj = {}

      var cartItem = { 'item': this.product, 'price':this.product.price, 'qty': 0 }
      cartObj[this.product.id] = cartItem

      if(!localStorage.getItem('cart')){
        localStorage.setItem('cart', JSON.stringify(cart))
      }

      cart = JSON.parse(localStorage.getItem('cart'));

      if(cart.length > 0){
        if(cart.hasOwnProperty(this.product.id)){
          cartObj = cart[this.product.id]
        }
      }

      cartObj[this.product.id]['qty']++
      cartObj[this.product.id]['price'] = this.product.price * cartObj[this.product.id]['qty']
      cart.push(cartObj);
      localStorage.setItem('cart', JSON.stringify(cart));
      console.log('added')
    }
  }

Saya ingin memiliki sesuatu seperti ini, katakanlah pengguna mengklik 3 kali pada produk yang sama.

['product_id': { 'item': this.product, 'price':this.product.price, 'qty': 3 }] 

Tapi alih-alih javascript melakukan ini

[
'product_id': { 'item': this.product, 'price':this.product.price, 'qty': 1 },
'product_id': { 'item': this.product, 'price':this.product.price, 'qty': 1 },
'product_id': { 'item': this.product, 'price':this.product.price, 'qty': 1 }
] 

Tolong bantu

0
Akan Udosen 20 Januari 2020, 17:22

2 jawaban

Jawaban Terbaik

Coba ini, itu harus memperbaiki masalah

addToCart(){
      var cart = []
      var cartObj = {}

      var cartItem = { 'item': this.product, 'price':this.product.price, 'qty': 0 }
      cartObj[this.product.id] = cartItem

      if(!localStorage.getItem('cart')){
        localStorage.setItem('cart', JSON.stringify(cart))
      }

      cart = JSON.parse(localStorage.getItem('cart'));

//---------> this check condition needs to be fixed      
      // if(cart.length > 0){
      //  if(cart.hasOwnProperty(this.product.id)){
      //    cartObj = cart[this.product.id]
      //  }
      // }
      let itemIndex = cart.findIndex((val)=>val.hasOwnProperty(this.product.id));
      if(cart[itemIndex]) {
         cartObj=cart[itemIndex];
      } else {
        cart.push(cartObj);
      }

      cartObj[this.product.id]['qty']++
      cartObj[this.product.id]['price'] = this.product.price * cartObj[this.product.id]['qty']
      // cart.push(cartObj);
      localStorage.setItem('cart', JSON.stringify(cart));
      console.log('added')
    }
1
ideasyed 20 Januari 2020, 15:06

Anda mendapatkan rangkap tiga karena Anda mendorong ke Array cart setiap kali pengguna mengklik.

Jika Anda ingin menghindari ini, Anda harus memeriksa apakah sudah ada di cart Array, mungkin yang terbaik untuk memeriksa id

var exists = cart.find(item => item.id === this.product.id)
if (!exists) {
  cart.push(cartObj)
}
0
GMaiolo 20 Januari 2020, 14:33