Задать вопрос
@inefablecl
Щас бы что-то работало...

Как сделать проверку и добавление количества в корзину JS Vanilla?

Есть вот такая корзина, с добавлением из каталога и подсчетом суммы. Проблема в том, что при добавлении одинаковых элементов, они просто дублируются, а хочется, чтобы менялось количество. Понимаю, что нужно просто сделать проверку на наличие в корзине и плюсовать количество если такой есть. Но не знаю как это реализовать.

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;
  },
};
  • Вопрос задан
  • 484 просмотра
Подписаться 1 Средний 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
Morpheus_God
@Morpheus_God
Вам нужно в корзину "пушить" товар вместе с id, по умолчанию что бы товар добавлялся в количестве 1 к примеру.
Потом при добавлении товара повторно, функция добавления должна проверять, есть ли такой id в массиве или нет, если есть то увеличиваете количество, если нет то просто добавляете.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы