代码之家  ›  专栏  ›  技术社区  ›  Nauman Tanwir

javascript:如何从数组中移除特定元素

  •  0
  • Nauman Tanwir  · 技术社区  · 7 年前

    我正在尝试使用普通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代码。稍后我将为它创建ui并使用 eventListener 那会叫我的 parent Class MyBasket() .

    问题 如何从购物车中删除特定项目?这个项目可以是第一个,最后一个,或者在数组中间的某个地方。

    1 回复  |  直到 7 年前
        1
  •  2
  •   ellipsis    7 年前

    使用filter从库存中获取项目,并使用splice从库存中移除该元素

    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);