所以我有这样的对象数组:
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时。
我在哪里出错了,还有一些内置的数学函数可以做我想做的事吗?
答案 0 :(得分:1)
每次循环都会丢弃之前计算的内容,并使用新计算覆盖amount
。所以你最后的结果就是从第一个数字中减去最后一个数字。
相反,你需要保持一个正在运行的记录。像这样:
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;
答案 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);