评估数组平均值的问题

Issue with evaluating average of an array

我正在尝试显示一组测试分数,在它们之上是这些分数的平均值。这是我正在使用的代码:

var clickDisplayResults = function () {
  $("results").value = "";
  function calculate(scores) {
    var i = 0, sum = 0, len = scores.length;
    while (i < len) {
      sum = sum + scores[i++];
    };
    return sum / len;
};

var average = calculate(scores);
$("results").value = "The average score is: " + parseInt(average) + "\n";
$("results").value += "High Score: " + Math.max.apply(null, scores) + "\n";
$("results").value += "Low Score: " + Math.min.apply(null, scores) + "\n" + "\n";
for (var i = 0; i < names.length; i++) {
  $("results").value += names[i] + ", " + scores[i] + "\n";
};

然而,当我这样做时,在添加新分数后我得到的平均值在一个荒谬的范围内。

这里是加分代码:

var clickAddScore = function () {
  if ( $("name").value == "" || $("score").value < 0 || $("score").value > 100 || isNaN($("score").value) ) {
    alert("Please enter a valid name and score");
    $("name").value = "";
    $("score").value = "";
    return false;
  };
  else {
    names[names.length] = $("name").value;
    scores[scores.length] = $("score").value;
    $("name").value = "";
    $("score").value = "";
  };
};

如有任何建议,我们将不胜感激。

您正在处理字符串并将其视为数字

console.log("100" + 100);

您需要将字符串转换为数字。您可以使用 parseInt、parseFloat、Number 或 Unary plus。

您的代码效率有点低,因为您不断访问 DOM 的值,因此声明了一些变量。而你的else语句是错误的。

var clickAddScore = function() {
  var studentName = $("name").value.trim();
  var score = Number($("score").value);
  if (studentName == "" || score < 0 || score > 100 || isNaN(score)) {
    alert("Please enter a valid name and score");
  } else {
    names.push(studentName);
    scores.push(score);
  }
  $("name").value = "";
  $("score").value = "";
}