我有一个包含多行的表单,用户可以在其中输入数字并计算输出。
我目前可以计算每一行的输出-小计。但希望能够计算所有小计-总计。
我能够将每个小计记录到控制台,但无法弄清楚如何对这些值求和。阅读过一些类似的问题后,我认为我需要创建一个值数组并汇总这些值。
使用当前正在使用的循环是否可能?
这是我目前拥有的:
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.log(subTotal);
});
}
calculate.addEventListener('click', calculateSubTotal);
这是一支笔:https://codepen.io/abbasarezoo/pen/WBXjWO?editors=1111
答案 0 :(得分:1)
在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.log(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)
}