簡體   English   中英

如何返回對象數組屬性的總和而不是它們的double?

[英]How to return the sum of objects-array properties instead of their double?

我正在制作一個費用跟蹤器的基本代碼(沒有ui,只有初始腳本),但是在嘗試console.log時出現問題,用戶記錄了總花費,我的代碼僅使每筆購買的花費翻了一番項目,所以我決定在這里尋求幫助。

編碼:

//initial code

const account = {
    name: 'user',
    expenses: [],
    addExpense: function(description, amount) {
        account.expenses.push({
            description: description,
            amount: amount
        });
    },
    getAccountSummary: function() {
        let expenses = account.expenses;
        for (let i = 0; i < expenses.length; i++ ) {
            let value = expenses[i].amount + expenses[i].amount;
            console.log(value);
        }
    }
}

//output calls

account.addExpense('Milk', 8);
account.addExpense('Netflix', 30);
account.addExpense('Steam summer sale', 26);
account.addExpense('Coffee', 4);
console.log(account.getAccountSummary());

代碼始終在以下記錄此值:

16
60
52
8

實際上是輸入值(8、30、26、4)的兩倍。

我正在尋找的輸出是所有這些值的總和,在這種情況下:

68

希望我的問題清楚。

當您想要一個基於數組中項目的值時,您應該考慮reduce

const account = {
    name: 'user',
    expenses: [],
    addExpense: function(description, amount) {
        account.expenses.push({
            description: description,
            amount: amount
        });
    },
    getAccountSummary: function() {
       return account.expenses.reduce((acc,{amount}) => acc+amount,0);
    }
}

在您的getAccountSummary中

采用

let value = 0;
for (let i = 0; i < expenses.length; i++ ) {
     value += expenses[i].amount ;   
     console.log(value); 
}

希望對您有幫助。

expenses[i].amount加2倍,以expenses[i].amount let value = expenses[i].amount + expenses[i].amount; ,這就是為什么被加倍的原因。

如果要在getAccountSummary打印總和,則可以執行以下操作:

  getAccountSummary: function() {
      const expenses = account.expenses;
      let value = 0
      for (let i = 0; i < expenses.length; i++ ) {
          value += expenses[i].amount;
      }
      console.log(value);
  }

但是,如果您想在getAccountSummary上返回總和,以便可以打印它(這似乎更合理),則可以這樣做:

  getAccountSummary: function() {
      const expenses = account.expenses;
      let value = 0
      for (let i = 0; i < expenses.length; i++ ) {
          value += expenses[i].amount;
      }
      return value;
  }

並且您應該能夠調用console.log(account.getAccountSummary());

您也可以使用forEach()迭代費用。

主要問題是您是直接記錄值,而不是返回它們以供以后記錄。

另外,在現代Javascript中也無需使用“ function”關鍵字。

這是我的解決方案,給出了預期的輸出。

const account = {

    name: 'user',
    expenses: [],

    addExpense(description, amount) {
        account.expenses.push({
            description: description,
            amount: amount
        });
    },

    getAccountSummary() {

        return account.expenses.reduce((result, expense) => result + expense.amount, 0)
    }
}

//output calls

account.addExpense('Milk', 8);
account.addExpense('Netflix', 30);
account.addExpense('Steam summer sale', 26);
account.addExpense('Coffee', 4);
console.log(account.getAccountSummary()); // 68

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM