Корзина удаления товара и применения купона в js

Я пытаюсь удалить товар без удаления корзины и снизить цену, если у клиента есть купон или превышено определенное количество, пока js до использования Django вот html код js если у вас есть совет не стесняйтесь

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);
            }
        }

    }

Вы можете использовать функцию фильтра для удаления элемента, таким образом вы удалите только тот элемент, который содержит определенный идентификатор.

removeItem(id) {
   this.items = this.items.filter(item => item.id !== id);
}

Для применения купона, если только у вас нет всех купонов, хранящихся в вашем front-end, вы должны сделать вызов HTTPS, чтобы проверить, действителен ли купон или нет, а также его значение, чтобы затем применить скидку в корзине.

Предложение к вашему коду связано с функцией containsItem, в которой вы итерационно просматриваете весь массив и проверяете id каждого элемента по отдельности, а затем возвращаете пользователю. Вы можете использовать функцию some, чтобы позволить JS проверить это за вас.

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]

Другое предложение - в updateItem вы можете получить нужный вам элемент с помощью функции find.

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);
  }
}

Кроме того, вам не нужно переназначать массив, поскольку когда вы ссылаетесь на объект, он будет обновлен и на его источнике.

Вернуться на верх