Создайте новый массив из значений в цикле, затем сложите все значения из нового массива - PullRequest
1 голос
/ 21 мая 2019

У меня есть форма с несколькими строками, где пользователь может вводить числа и вычислять выходные данные.

В настоящее время я могу рассчитать выход каждой строки - промежуточный итог.Но хотелось бы иметь возможность рассчитать все промежуточные итоги - итоговые.

Я могу записать каждый промежуточный итог на консоль, но не могу понять, как суммировать эти значения.Прочитав несколько похожих вопросов, я считаю, что мне нужно создать массив значений и суммировать эти значения.

Возможно ли это с помощью цикла, который я сейчас использую?

Вот что у меня сейчас есть:

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 Ответ

1 голос
/ 21 мая 2019

Объявите переменную снаружи 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)
}
...