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

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

Войти через центр авторизации
Похожие вопросы
16 мая 2024, в 23:10
12000 руб./за проект
16 мая 2024, в 22:37
5000 руб./за проект
16 мая 2024, в 22:29
4000 руб./за проект