JavaScript: как удалить определенный элемент из массива - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь создать корзину с использованием концепций vanilla javascript и OOJS.

let inventory = [
    { item: "apples", price: 19.95, qty: 50 },
    { item: "oranges", price: 20.99, qty: 40 },
    { item: "pineapples", price: 40.0, 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) {
    // write code here.
    this.inventory = this.inventory.filter(function(el) {
      if (
        el.item == item &&
        el.price == price &&
        el.qty == qty
      ) return false;
      return true;
    });
  };

  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, который вызовет мой parent Class MyBasket().

Проблема как мне удалить определенный товар из корзины? Этот элемент может быть первым, последним или где-то посередине массива.

1 Ответ

2 голосов
/ 10 марта 2019

Используйте фильтр, чтобы достать предмет из инвентаря, и с помощью склеивания удалите этот элемент из инвентаря

let inventory = [
    { item: "apples", price: 19.95, qty: 50 },
    { item: "oranges", price: 20.99, qty: 40 },
    { item: "pineapples", price: 40.0, 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 });
    console.log(this.totalItems)
  };

  MyBasket.prototype.removeItems = function(item, price, qty) {
    // write code here.
    var 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('s',23,43);
cart.removeItems('lemons',10.12,100);
...