Итак, у меня есть этот массив объектов, который выглядит так:
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.
Где я ошибаюсь в этом, также есть ли встроенная математическая функция, которая будет делать то, что я пытаюсь сделать?
Каждый раз через цикл вы отбрасываете то, что вы рассчитали раньше, и переписываете 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);
if (!budgetData || budgetData.length === 0)
В качестве альтернативы вы можете уменьшить массив:
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);
amount
в каждой итерации цикла