Javascript 从第一项中减去数组中的所有值

Javascript 从第一项中减去数组中的所有值,javascript,arrays,for-loop,math,Javascript,Arrays,For Loop,Math,我有一组对象,看起来像这样: let budgetData = [{title: "Monthly Income", amount: "2500"}, {title: "rent", amount: "1000"},{title: "car", amount: "200"}; class Budget { constructor(settings){ Object.assign(this, settings); } valueOf(){ return this.amo

我有一组对象,看起来像这样:

let budgetData = [{title: "Monthly Income", amount: "2500"}, {title: 
"rent", amount: "1000"},{title: "car", amount: "200"};
 class Budget {
  constructor(settings){
     Object.assign(this, settings);
  }
  valueOf(){ return this.amount;}
}

budgetData = budgetData.map(el => new Budget(el));
我正在尝试这样的数学:

let budgetData = [{title: "Monthly Income", amount: "2500"}, {title: 
"rent", amount: "1000"},{title: "car", amount: "200"};
 class Budget {
  constructor(settings){
     Object.assign(this, settings);
  }
  valueOf(){ return this.amount;}
}

budgetData = budgetData.map(el => new Budget(el));
2500-1000-200=不管结果如何。您可以继续向该数组添加金额,直到您添加了每月费用

当您第一次仅使用两个值运行此操作时,该值就是您所期望的值(即2-1=1)

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

let amount=[];
对于(设i=1;i
因此,这个代码与上述信息的答案出来:2300,当我期待它说1300


我的问题出在哪里呢?还有,是否有一些内置的数学函数可以完成我想做的事情?

每次循环中,你都会扔掉你以前计算过的东西,并用新的计算覆盖
数量。因此,你最后得到的只是从第一个数字中减去最后一个数字号码

相反,你需要保持一个连续的记录。类似这样:

let budgetData = [{title: "Monthly Income", amount: "2500"}, {title: 
"rent", amount: "1000"},{title: "car", amount: "200"};
 class Budget {
  constructor(settings){
     Object.assign(this, settings);
  }
  valueOf(){ return this.amount;}
}

budgetData = budgetData.map(el => new Budget(el));
让预算数据=[
{标题:“月收入”,金额:“2500”},
{标题:“租金”,金额:“1000”},
{标题:“汽车”,金额:“200”}
];
let amount=budgetData[0]。金额;
对于(设i=1;i
或者,您可以减少阵列:

const total = budgetData.reduce((previous, current) => (previous.amount || previous) - current.amount);
如果预算对象实现了valueOf方法,如下所示:

let budgetData = [{title: "Monthly Income", amount: "2500"}, {title: 
"rent", amount: "1000"},{title: "car", amount: "200"};
 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);

你没有保持一个运行总数。换句话说,你在每次循环中都会覆盖
数量
。唯一的问题是,在用户输入某个数据之前,预算数据数组什么都不是,所以我得到了“数量未定义”错误。是的,您只希望在有数据的情况下运行此代码。如果您需要检查没有数据的可能性,您可以在(!budgetData | | budgetData.length==0)中将其全部包装在
有些奇怪的行为,但它现在起作用了。如果没有IF语句,它将等于一个负数,加上IF语句,然后减去,通常不会出现未定义的错误。这就像预期的一样。在尝试这样做时,我似乎总是忘了跟踪运行总数。同样的情况下,数组初始化为noth直到获得用户输入为止。