如何计算多个总和?

问题描述 投票:0回答:1

我有一个对象数组,在其中创建需要在html中显示的属性。这是数组中对象之一的结构

 {
    "functional_id": "201911291131250012400000SD4AYAA1",
    "transactions": [
      {
        "quantity": 2,
        "price": 140,
        "item": {
          "name": "Carton de 10 coffrets",
          "description": "+ 2 recharges d'argile offertes",
          "product": {
            "name": "Coffret empreinte rouge"
          }
        },
        "amount": 280
      },
      {
        "quantity": 2,
        "price": 17,
        "item": {
          "name": "1 lanterne d'accueil + 1 accroche porte",
          "product": {
            "name": "Lanterne d'accueil",
            "description": "Lors d'une euthanasie, cette affichette verticale auto-éclairée par bougie LED, est disposée à l’accueil. Elle montre l’importance de ce moment pour votre clinique. <br /> Les accroches porte déposés sur les poignées des salles de consultation invitent au calme."
          }
        },
        "amount": 34
      },
      {
        "quantity": 1,
        "price": 0,
        "item": {
          "name": "Petit modèle",
          "description": "Par 25",
          "product": {
            "name": "Sacs blancs",
            "description": "Pour les crémations Plurielles"
          }
        },
        "amount": 0
      },
      {
        "quantity": 1,
        "price": 0,
        "item": {
          "name": "Moyen modèle",
          "description": "Par 20",
          "product": {
            "name": "Sacs blancs",
            "description": "Pour les crémations Plurielles"
          }
        },
        "amount": 0
      },
      {
        "quantity": 1,
        "price": 0,
        "item": {
          "name": "Grand modèle",
          "description": "Par 10",
          "product": {
            "name": "Sacs blancs",
            "description": "Pour les crémations Plurielles"
          }
        },
        "amount": 0
      },
      {
        "quantity": 2,
        "price": 0,
        "item": {
          "product": {
            "name": "Carnet de conventions"
          }
        },
        "amount": 0
      }
    ],
    "date": "29/11/2019",
    "order_number": "113125"
  }

这时,我为每个“交易”创建一个属性“金额”,以计算购买每种产品的总金额。

    public inicializeData() {

        this.loaderService.eLoader.emit(true);
        this.cartsSubscription = this.cartsService.getCarts().subscribe(carts => {
            this.orders = carts;
            this.orders.forEach(cart => {
                const day = cart.functional_id.substring(6, 8);
                const month = cart.functional_id.substring(4, 6);
                const year = cart.functional_id.substring(0, 4);
                cart.date = day + '/' + month + '/' + year;
                cart.order_number = cart.functional_id.substring(8, 14);
                cart.transactions.forEach(item => {
                    item.amount = item.quantity * item.price;
                });
            });
            this.load = true;
            this.loaderService.eLoader.emit(false);
        });
    }



问题是我还需要所有交易的总计,但我无法计算该总计。首先,我声明一个值为0的类变量,然后在计算“ item.amount”的点上将它们全部加起来。

public amount = 0;

 public inicializeData() {

        this.loaderService.eLoader.emit(true);
        this.cartsSubscription = this.cartsService.getCarts().subscribe(carts => {
            this.orders = carts;
            this.orders.forEach(cart => {
                const day = cart.functional_id.substring(6, 8);
                const month = cart.functional_id.substring(4, 6);
                const year = cart.functional_id.substring(0, 4);
                cart.date = day + '/' + month + '/' + year;
                cart.order_number = cart.functional_id.substring(8, 14);
                cart.transactions.forEach(item => {
                    item.amount = item.quantity * item.price;
                    this.amount += item.amount;
                });
            });
            this.load = true;
            this.loaderService.eLoader.emit(false);
        });
    }



而且我看到我得到的是所有交易的总数。这是不希望的。

我了解这是一个范围问题。但是我也试图在最后一个forEach中声明该变量,但是它也不起作用。

    public inicializeData() {

        this.loaderService.eLoader.emit(true);
        this.cartsSubscription = this.cartsService.getCarts().subscribe(carts => {
            this.orders = carts;
            this.orders.forEach(cart => {
                const day = cart.functional_id.substring(6, 8);
                const month = cart.functional_id.substring(4, 6);
                const year = cart.functional_id.substring(0, 4);
                cart.date = day + '/' + month + '/' + year;
                cart.order_number = cart.functional_id.substring(8, 14);
                cart.transactions.forEach(item => {
                    item.amount = item.quantity * item.price;
                    let overallAmount = 0;
                    overallAmount += item.amount;
                });
            });
            this.load = true;
            this.loaderService.eLoader.emit(false);
            console.log(JSON.stringify(this.orders));
        });
    }

我需要的是,在示例对象中,我可以创建一个属性,该属性是所有item.amount的总和(在这种情况下,它将是totalAmount = 314)。

有人让我明白我的错误。预先非常感谢

javascript scope angular7 calculation
1个回答
0
投票

在此行this.amount += item.amount;尝试做

const cal = item.quantity * item.price;
            item.amount=cal
            this.amount += cal;

var amount=[]
const cal = item.quantity * item.price;
                item.amount=cal
                var.push(cal)
amount=amount.reduce((a,b)=>{return a+b})

如果您希望向对象添加物业交易金额,则可以使用此

t=0
x= cart.transactions.filter(x=>cart['transac-amount']=t+=x.amount)
console.log(cart)

它将向您的对象添加交易金额

© www.soinside.com 2019 - 2024. All rights reserved.