Как перестать вычитать, когда достигнет числа 0 - PullRequest
0 голосов
/ 12 марта 2019

module.exports = function Cart(oldCart) {
    this.items = oldCart.items || {};
    this.totalQty = oldCart.totalQty || 0;
    this.totalPrice = oldCart.totalPrice || 0;

    this.add = function(item, id, image) {
        let storedItem = this.items[id];
        if(!storedItem) {
            storedItem = this.items[id] = { item: item, image: image, qty: 0, price: 0, id: id};
        }
        storedItem.qty++;
        storedItem.price = storedItem.item.price * storedItem.qty;
        this.totalQty++;
        this.totalPrice += storedItem.item.price;
    };

    this.reduceByOne = function(id) {
        this.items[id].qty--;
        this.items[id].price -= this.items[id].item.price;
        this.totalQty--;
        this.totalPrice -= this.items[id].item.price;
        // minimum number 0
    };

    this.addByOne = function(id) {
        this.items[id].qty++;
        this.items[id].price += this.items[id].item.price;
        this.totalQty++;
        this.totalPrice += this.items[id].item.price;
    };

    this.removeItem = function(id) {
        this.totalQty -= this.items[id].qty;
        this.totalPrice -= this.items[id].item.price;
        delete this.items[id];
    };
    
    this.generateArray = function() {
        var arr = [];
        for (var id in this.items) {
            arr.push(this.items[id]);
        }
        return arr;
    };
}

Мне было интересно, что может быть приемлемым способом заставить функцию reduByOne иметь минимальное число 0 (не -1, -2 и т. Д., Что происходит сейчас),Поэтому он должен прекратить вычитать, когда достигнет числа 0. Но имейте в виду, что эта функция не должна влиять и на другие функции.Я уже написал условие внутри this.reduceByOne function, и теперь единственное, что нужно сделать, это проверить, имеет ли this.items [id] .qty номер 0.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

просто проверьте, если количество элемента равно 0, а если 0, просто вернитесь, ничего не делайте

this.reduceByOne = function(id) {
    if(this.items[id].qty == 0) return;
    this.items[id].qty--;
    this.items[id].price -= this.items[id].item.price;
    this.totalQty--;
    this.totalPrice -= this.items[id].item.price;
};
0 голосов
/ 12 марта 2019

Любая функция, которая выполняет вычитание, может позаботиться об этом:

this.totalPrice = Math.max(0, this.totalPrice - this.items[id].item.price);

вместо

this.totalPrice -= this.items[id].item.price;

Обратите внимание, что Math.max не покрывает возможное NaN.

Или это можно сделать с помощью методов доступа:

get total() {
  return this._total || 0;
}

set total(v) {
  if (v >= 0)
    this._total = v;
}

Это также относится к значению по умолчанию, например this.totalPrice = oldCart.totalPrice || 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...