繁体   English   中英

在用户将另一个数字输入数组后计算数组的平均值

[英]Calculating the average of an array after the user inputs another number into the array

我有一个得分文本字段,用户必须在0到100之间输入才能添加到数组中。 显示结果后,应计算数组中数字的平均值。 但是,每当我输入一个数字时,平均值就会完全关闭并且非常高。 我该如何解决? (例如数组[88,98,77,88]并输入数字99,平均跳转到7039)

我的代码:

 var scores = [88, 98, 77, 88]; var addScore = function() { var scoreInput = $("score").value; if (scoreInput.length == 0 || scoreInput > 100 || scoreInput < 0 || isNaN(scoreInput)) { alert("You must enter a valid score."); } else { scores.push(scoreInput); } } var displayResults = function() { var highest = Math.max(...scores); var total = 0; for (var i = 0; i < scores.length; i++) { total += scores[i]; } var average = total / scores.length; var output = "<h2>Results </h2><br>Average Score = " + average + ; $("results").innerHTML = output; }; 

您的数组正在接收字符串而不是数字。 在进行数学运算之前,必须使用parseInt或parseFloat将用户输入转换为数字。

var addScore = function () {
    var scoreInput = $("#score").value; // or ".score"
    scoreInput = parseFloat(scoreInput); // here. If not valid, returns NaN.
    if (scoreInput > 100 || scoreInput < 0 || isNaN(scoreInput)) {
        alert("You must enter a valid score.");
    } else {
        scores.push(scoreInput);
    }
}

尝试将您的代码更改为:

var scores = [88, 98, 77, 88];

var addScore = function () {
    var scoreInput = $("score").value;
    scoreInput = parseInt(scoreInput);
    if (scoreInput.length == 0 || scoreInput > 100 || scoreInput < 0 || isNaN(scoreInput)) {
        alert("You must enter a valid score.");
    } else {
        scores.push(scoreInput);
    }
}

var displayResults = function (){
    var highest = Math.max(...scores);
    var total = 0;

    for(var i = 0; i < scores.length; i++)
    {
        total += scores[i];
    }
    var average = total/(scores.length);

    var output = "<h2>Results </h2><br>Average Score = " + average ;
    $("results").innerHTML = output;
};

它应该工作。

做出的改变:

  1. scoreInput = parseInt(scoreInput); addScore函数中,以便在进行任何比较之前首先将值转换为Integer。
  2. var average = total/(scores.length); displayResults函数中使其清晰。
  3. 清理"<h2>Results </h2><br>Average Score = "+average+; 一个正确和清洁的版本。 请注意,你到底有一个+

你没有定义$(...)函数,所以我猜它是jquery。 我修了一下你的代码:

  • change var scoreInput = $("score").value to $(".score")[0].value; (这将使用“.score”类读取输入并将其转换为数字)
  • $(".results").innerHTML更改$(".results")[0].innerHTML
  • 简化addScore if语句

 var scores = [88, 98, 77, 88]; var addScore = function () { var scoreInput = +$(".score")[0].value; if (isNaN(scoreInput) || scoreInput > 100) { alert("You must enter a valid score."); } else { scores.push(scoreInput); displayResults(); } } var displayResults = function (){ var highest = Math.max(...scores); var total = 0; for(var i = 0; i < scores.length; i++) { total += scores[i]; } var average = total /scores.length; var output = "<h2>Results </h2><br>Average Score = "+average; $(".results")[0].innerHTML = output; }; 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input class="score" type="number"> <button onclick="addScore()">add</button> <div class="results"> 

您的代码中有几个问题:

  1. scoreInput的类型为字符串。 您必须将其转换为数字才能执行实际的算术运算。

  2. 您已错过选择器中的ID符号( #,. )。

  3. 当使用jQuery,你必须使用val()value$("#score").val()

  4. 同样$("results").innerHTML = output; 应该是$("#results").html(output);

尝试以下方式:

 var scores = [88, 98, 77, 88]; var addScore = function () { var scoreInput = $("#score").val().trim(); if (!scoreInput || scoreInput > 100 || scoreInput <= 0 || isNaN(scoreInput)) { alert("You must enter a valid score."); $("#score").val($("#score").val().slice(0, -1)); // Remove the last character } else { scores.push(Number(scoreInput)); displayResults(); } } var displayResults = function (){ var highest = Math.max(...scores); var total = 0; for(var i = 0; i < scores.length; i++) { total += scores[i]; } var average = total /scores.length; var output = "<h2>Results </h2><br>Average Score = "+average; $("#results").html(output); }; 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input id="score" oninput="addScore()"> <div id="results"></div> 

然而,平均值的计算没有任何向导......

 var scores = [88, 98, 77, 88]; var average = scores.reduce((a,b)=>a+b) / scores.length; console.log ( average ); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM