【问题标题】:How to return the sum of objects-array properties instead of their double?如何返回对象数组属性的总和而不是它们的双精度?
【发布时间】:2019-12-29 17:39:18
【问题描述】:

我正在制作费用跟踪器的基本代码(没有 ui,只有初始脚本),但我在尝试控制台时遇到了问题。记录用户总花费的总和,我的代码只使花费的钱翻了一番对于每个购买的物品,所以我决定在这里寻求帮助。

代码:

//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

希望我的问题很清楚。

【问题讨论】:

  • 这会使价值翻倍。让价值=费用[i].amount +费用[i].amount;你可能想要“价值+=费用[i].amount;”之类的东西

标签: javascript arrays object for-loop foreach


【解决方案1】:

主要问题是您直接记录值,而不是返回它们以供以后记录。

此外,现代 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

【讨论】:

    【解决方案2】:

    如果您想要一个基于数组中项目的值,那么您应该查看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);
        }
    }
    

    【讨论】:

      【解决方案3】:

      expenses[i].amountlet value = expenses[i].amount + expenses[i].amount; 处被添加了 2 次,这就是加倍的原因。

      如果你想在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() 来迭代费用。

      【讨论】:

        【解决方案4】:

        在您的 getAccountSummary 中

        使用

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

        希望对你有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-27
          • 2022-01-23
          • 2014-09-15
          • 1970-01-01
          • 2020-06-29
          • 1970-01-01
          相关资源
          最近更新 更多