У меня есть форма с несколькими строками, где пользователь может вводить числа и вычислять результаты.
В настоящее время я могу рассчитать вывод каждой строки - промежуточный итог. Но хотелось бы иметь возможность вычислять все промежуточные итоги - итоги.
Я могу вывести каждый промежуточный итог на консоль, но не могу понять, как суммировать эти значения. Прочитав некоторые подобные вопросы, я считаю, что мне нужно создать массив значений и суммировать эти значения.
Возможно ли это, используя цикл, который я сейчас использую?
Вот что у меня есть на данный момент:
const rows = document.querySelectorAll('.row');
const calculate = document.querySelector('.calculate');
const output = document.querySelector('.output');
// Calculate
function calculateSubTotal() {
rows.forEach(function(row, index){
const input1Val = Number(row.querySelector('.input-1').value);
const input2Val = Number(row.querySelector('.input-2').value);
const subTotal = input1Val + input2Val;
console.info(subTotal);
});
}
calculate.addEventListener('click', calculateSubTotal);
Вот ручка: https://codepen.io/abbasarezoo/pen/WBXjWO?editors=1111
Объявите переменную снаружи forEach
и увеличьте ее внутри forEach
function calculateSubTotal() {
let total = 0;
rows.forEach(function(row, index){
const input1Val = Number(row.querySelector('.input-1').value);
const input2Val = Number(row.querySelector('.input-2').value);
const subTotal = input1Val + input2Val;
console.info(subTotal);
total += subTotal
});
}
Упрощенная версия вашего кода с использованием reduce()
и map()
будет
function calculateSubTotal() {
let total = 0;
let subTotals = rows.map(x => +x.querySelector('.input-1').value + +x.querySelector('.input-2').value)
let total = subTotals.reduce((ac,a) => ac + a,0)
}