根据循环中的值创建一个新数组,然后将新数组中的所有值相加

时间:2019-05-21 16:21:57

标签: javascript arrays loops foreach sum

我有一个包含多行的表单,用户可以在其中输入数字并计算输出。

我目前可以计算每一行的输出-小计。但希望能够计算所有小计-总计。

我能够将每个小计记录到控制台,但无法弄清楚如何对这些值求和。阅读过一些类似的问题后,我认为我需要创建一个值数组并汇总这些值。

使用当前正在使用的循环是否可能?

这是我目前拥有的:

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

1 个答案:

答案 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)
}