Есть вот такая корзина, с добавлением из каталога и подсчетом суммы. Проблема в том, что при добавлении одинаковых элементов, они просто дублируются, а хочется, чтобы менялось количество. Понимаю, что нужно просто сделать проверку на наличие в корзине и плюсовать количество если такой есть. Но не знаю как это реализовать.
const cart = {
cartBlock: null,
catalogList: [],
goods: [],
init(cartBlockClass, catalogList) {
this.cartBlock = document.querySelector(`.${cartBlockClass}`);
this.catalogList = catalogList;
this.render();
},
render() {
if (this.getCartGoodsLength() > 0) {
this.renderCartList();
this.renderCartTotalInfo();
} else {
this.renderEmptyCart();
}
},
findProduct(id_product) {
return this.catalogList.find(
(product) => product.id_product === id_product
);
},
addToBasket(id_product) {
const product = this.findProduct(id_product);
if (product) {
this.goods.push({ ...product });
this.render();
} else {
alert("Ошибка добавления!");
}
},
getCartGoodsLength() {
return this.goods.length;
},
renderEmptyCart() {
this.cartBlock.innerHTML = "";
this.cartBlock.insertAdjacentHTML("beforeend", "Корзина пуста.");
},
renderCartList() {
this.cartBlock.innerHTML = "";
this.goods.forEach((item) => {
this.cartBlock.insertAdjacentHTML("beforeend", this.renderCartItem(item));
});
},
renderCartItem(item) {
return `<div>
<h3>${item.product_name}</h3>
<p>${item.price} руб.</p>
<p>${item.quantity} шт.</p>
</div>`;
},
totalPrice() {
return this.goods.reduce((sum, item) => {
return sum + item.price * item.quantity;
}, 0);
},
totalQuantity() {
return this.goods.reduce((sum, item) => {
return sum + item.quantity;
}, 0);
},
renderCartTotalInfo() {
let cartmarket = document.getElementById("cartmarket");
let h3tag = document.createElement("h3");
cartmarket.appendChild(h3tag);
document.body.appendChild(cartmarket);
h3tag.textContent = `В корзине: ${cart.totalQuantity()} товаров на сумму ${cart.totalPrice()} рублей`;
return h3tag;
},
};