Estoy tratando de eliminar un artículo sin eliminar el carrito y reducir un precio si el cliente tiene un cupón o supera una cierta cantidad mientras js antes de usar Django aquí está el código html js si tiene algún consejo, no dude
html
<div data-name="name" data-price="250" data-id="2"> <img src="x.jpg" alt="" /> <h3>name</h3> <input type="number" class="count" value="1" /> <button class="tiny">Add to cart</button> </div> <script type="text/template" id="cartT"> <% _.each(items, function (item) { %> <div class = "panel"> <h3> <%= item.name %> </h3> <span class="label"> <%= item.count %> piece<% if(item.count > 1) {%>s <%}%> for <%= item.total %>$</span > </div> <% }); %> </script>js
addItem: function (item) { if (this.containsItem(item.id) === false) { this.items.push({ id: item.id, name: item.name, price: item.price, count: item.count, total: item.price * item.count }); storage.saveCart(this.items); } else { this.updateItem(item); } this.total += item.price * item.count; this.count += item.count; helpers.updateView(); }, containsItem: function (id) { if (this.items === undefined) { return false; } for (var i = 0; i < this.items.length; i++) { var _item = this.items[i]; if (id == _item.id) { return true; } } return false; }, updateItem: function (object) { for (var i = 0; i < this.items.length; i++) { var _item = this.items[i]; if (object.id === _item.id) { _item.count = parseInt(object.count) + parseInt(_item.count); _item.total = parseInt(object.total) +parseInt(_item.total); this.items[i] = _item; storage.saveCart(this.items); } } }Puede usar la función de filtro para eliminar un elemento, de esta manera solo eliminará el elemento que contiene una identificación específica.
removeItem(id) { this.items = this.items.filter(item => item.id !== id); }Para aplicar el cupón, a menos que tenga todos los cupones almacenados en su front-end, debe realizar una llamada HTTPS para verificar si el cupón es válido o no, pero también su valor para luego aplicar el descuento en el carrito.
Una sugerencia para su código está relacionada con la función containsItem, donde itera a través de toda la matriz y verifica cada ID de elemento individualmente, y luego regresa al usuario. Puede usar la función some para permitir que JS lo verifique por usted.
containsItem: function (id) { return this.items?.some(item => item.id === id); } //PS: the ?. is a notion that checks if the variable exists and if it's true it continues, that way you won't have an undefined error. It is called [Optional Chaining][2]Otra sugerencia está en updateItem, puede obtener el elemento que necesita con la función de búsqueda .
updateItem: function (object) { const itemToUpdate = this.items.find(item => item.id === object.id); if(itemToUpdate) { itemToUpdate.count = parseInt(object.count) + parseInt(itemToUpdate.count); itemToUpdate.total = parseInt(object.total) +parseInt(itemToUpdate.total); storage.saveCart(this.items); } }Además, no necesita reasignar la matriz, ya que cuando se refiera al objeto, también se actualizará en su origen.