从第一个项

时间:2017-10-31 20:31:27

标签: javascript arrays for-loop math

所以我有这样的对象数组:

let budgetData = [{title: "Monthly Income", amount: "2500"}, {title: 
"rent", amount: "1000"},{title: "car", amount: "200"};

我正在尝试这样的数学:

2500 - 1000 - 200 =无论出现什么。您可以继续向此阵列添加金额,直到您添加了每月费用。

当你第一次只用两个值运行时,数量是你所期望的(即2 - 1 = 1)。

但是,向数组中添加两个以上的数量,它只会从第一个值中减去最后一个值。(即5 - 2 - 1 = 4)。

let amount = [];

for (let i = 1; i < budgetData.length; i++){ amount = 
budgetData[0].amount - budgetData[i].amount;


Console.log(amount) === 2300

所以带有上述信息的代码答案出现在:2300,当我期待它说1300时。

我在哪里出错了,还有一些内置的数学函数可以做我想做的事吗?

2 个答案:

答案 0 :(得分:1)

每次循环都会丢弃之前计算的内容,并使用新计算覆盖amount。所以你最后的结果就是从第一个数字中减去最后一个数字。

相反,你需要保持一个正在运行的记录。像这样:

&#13;
&#13;
let budgetData = [
  {title: "Monthly Income", amount: "2500"}, 
  {title: "rent", amount: "1000"},
  {title: "car", amount: "200"}
];

let amount = budgetData[0].amount;

for (let i = 1; i < budgetData.length; i++){ 
   amount = amount - budgetData[i].amount;
}

console.log(amount);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

或者你可以减少数组:

const total = budgetData.reduce((previous, current) => (previous.amount || previous) - current.amount);

如果您的预算对象实现 valueOf 方法,请执行以下操作:

 class Budget {
  constructor(settings){
     Object.assign(this, settings);
  }
  valueOf(){ return this.amount;}
}

budgetData = budgetData.map(el => new Budget(el));

它变得更加美丽:

const total = budgetData.reduce((a,b) => a-b);