Я пытаюсь создать корзину для покупок с использованием концепций vanilla javascript и OOJS.
let inventory = [
{ item: "apples", price: 19, qty: 50 },
{ item: "oranges", price: 20, qty: 40 },
{ item: "pineapples", price: 40, qty: 60 },
{ item: "lemons", price: 10.12, qty: 100 }
];
function MyBasket(inventory) {
this.totalItems = [];
}
MyBasket.prototype.addItems = function(item, price, qty) {
this.totalItems.push({ item: item, price: price, qty: qty });
};
MyBasket.prototype.removeItems = function(item, price, qty) {
let a =inventory.filter(e=>e.item==item);
inventory.splice(inventory.indexOf(a),1);
console.log(inventory)
};
MyBasket.prototype.updateInventory = function() {
cart.totalItems.forEach(i => {
const item = inventory.find(o => o.item === i.item);
if (item) item.qty -= i.qty;
});
}
MyBasket.prototype.cartItems = function() {
return this.totalItems;
};
MyBasket.prototype.totalAmount = function() {
return this.totalItems.reduce((acc, item) => {
return acc + item.price * item.qty;
}, 0);
};
var cart = new MyBasket();
cart.addItems("apples", 19, 2);
cart.addItems("oranges", 20, 3);
cart.addItems("lemons", 5, 4);
cart.updateInventory();
console.log("updated inventory", inventory);
cart.removeItems('lemons',10.12,100);
console.log("cart items", cart.cartItems());
console.log("total Amount", cart.totalAmount());
cart.updateInventory();
console.log("updated inventory", inventory);
Выше приведен код js для приложения.Позже я создам для него пользовательский интерфейс и использую eventListener
, который вызовет мой родительский класс MyBasket ().
У меня есть updateInventory()
, который в основном сравнивает cartItems с запасом, а затем вычитает соответствующее количествоэтого предмета из инвентаря.Всякий раз, когда есть какие-либо изменения в инвентаре, эта функция должна проверять и выдавать обновленный инвентарь.Например, после добавления элементов в корзину или после удаления элементов из корзины.
Проблема с updateInventory()
: , когда я запускаю updateInventory()
после добавления элементов, он содержит дубликатыценности.Он должен содержать только обновленный список.
Теперь, если я уберу некоторые предметы из корзины, инвентарь должен быть обновлен.теперь, когда я запускаю updateInventory()
, он снова вычитает количество.это приводит к неправильной информации об инвентаризации.