Как получить среднее значение массива нажатием кнопки? - PullRequest
0 голосов
/ 30 сентября 2019

У меня проблемы с кодировкой калькулятора оценок. Я везде оглядывался, но не могу понять. Это выходит с NaN.

var inputText;
var kArry = [];
var avg;
var antal;
var sum;

function karakter(){
    var inputText = document.getElementById('inputText').value; 
    if (inputText == 12 || inputText == 10 || inputText == 7 || 
        inputText == 4 || inputText == 2 || inputText == 0 || inputText == -3) {
        if(inputText !== "") {
            kArry.push(inputText); 
            };
        }
    document.getElementById("arrayText").innerHTML = kArry; 
    antal += 1;
    sum += inputText;
}

function gennemsnit() { 
    avg = sum/antal;
    document.getElementById("gennemsnit").innerHTML = Math.round(avg); 
}

Ответы [ 3 ]

1 голос
/ 30 сентября 2019

Что идет не так:

  • sum не имеет начального значения. Фактическое значение - undefined, и если вы добавите (числовое) значение, вы получите строку с 'undefined' в начале строки.

    Позже, используя деление с счетчиком, это значение дастNaN.

  • То же самое относится к antal, где оно объявлено, но не инициализировано с нуля.

  • Использование строки вместо числа для добавления к sum. Там вы можете взять унарный плюс +, который преобразует строковое число в число.

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

Вместе:

function karakter() {
  var inputText = document.getElementById('inputText').value;

  if (inputText == 12 || inputText == 10 || inputText == 7 || inputText == 4 || inputText == 2 || inputText == 0 || inputText == -3) {
    kArry.push(inputText);
    document.getElementById("arrayText").innerHTML = kArry;
    antal += 1;
    sum += +inputText;
  }
}


function gennemsnit() {
  var avg = sum / antal;
  document.getElementById("gennemsnit").innerHTML = Math.round(avg);
}

var kArry = [];
var antal = 0;
var sum = 0;
0 голосов
/ 30 сентября 2019

Вы пытаетесь добавить строки, числа и неопределенные друг к другу. Итак, начните числа с 0 и разберите строки в числа.

var inputText;
var kArry = [];
var avg;
var antal = 0; // Start as zero.
var sum = 0; // Start as zero.


function karakter(){

    var inputText = document.getElementById('inputText').value; 
    if (inputText == 12 || inputText == 10 || inputText == 7 || 
        inputText == 4 || inputText == 2 || inputText == 0 || inputText == -3) {
            if(inputText !== "") {
            kArry.push(inputText); 
            };
        }
    document.getElementById("arrayText").innerHTML = kArry; 
    antal += 1;
    sum += parseInt( inputText, 10 ); // We want the value as a number
}


function gennemsnit() { 
        avg = sum/antal;
        document.getElementById("gennemsnit").innerHTML = Math.round(avg); 
}
0 голосов
/ 30 сентября 2019

Вы можете вычислить среднее значение на месте, получив сумму всех элементов, а затем разделив ее на размер массива.

var list = [12, 10, 7, 4, 2, 0, -3];

document.querySelector("#calc").addEventListener("click", function() {
  var average = list.reduce(function(sum, item) {
    return sum + item;
  }, 0) / list.length;
  console.log(average);
});
<button id="calc">Get Average</button>
...