JavaScript - среднее число из массива с использованием функции Reduce

1

Я пытаюсь сделать программу, которая будет вычислять среднее число, делением суммы всех чисел на общее число чисел. Я попытался использовать .reduce(), но это не даст мне результат, который я хочу. Например, если я беру "4" и "2", программа должна сделать сумму этих двух, что составляет "6", а затем разделить ее на "2" (так как есть две цифры, которые составляют сумму), поэтому в итоге я получил бы "3". Однако то, что я получаю, это "21", скорее всего, потому что программа объединяет "4" и "2", так что результат будет "42", а затем он делит на "2". Как я могу изменить код, чтобы получить правильный результат?

var numOfNum = 0;
var result;
var allNums = [];
var total = 0;

function add() {

  var numbers = document.getElementById("numbers").value;

  if (numbers > 5) {
    alert("Maximum character limit reached.");
  } else {
    allNums.push(numbers);
    numOfNum++;
    document.getElementById("output").innerHTML = allNums + "<br>" + numOfNum;
  }

  total = allNums.reduce(function(a, b) {
    return a + b;
  }, 0);

}

function calculate() {
  result = total / numOfNum

  document.getElementById("output").innerHTML = result;
}
<!DOCTYPE html>
<html>

<head>
  <title>Racunanje proseka</title>
  <meta charset="UTF-8">
  <script src="racunanjeProseka.js"></script>
</head>

<body>
  <input type="text" id="numbers"> <br>
  <button id="add" onclick="add()">Add</button>
  <button id="calculate" onclick="calculate()">Calculate</button>
  <p id="output"></p>
</body>

</html>
Теги:
arrays

2 ответа

3
Лучший ответ

номера должны быть числом:

var numbers = +document.getElementById("numbers").value;

Этот дополнительный + называется оператором унарного плюса, который преобразует строки в числа.

2

вы можете проанализировать значение перед добавлением

total = allNums.reduce(function(a, b) {
    return parseInt(a) + parseInt(b);
  }, 0);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню