[英]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;
};
它应该工作。
做出的改变:
scoreInput = parseInt(scoreInput);
在addScore
函数中,以便在进行任何比较之前首先将值转换为Integer。 var average = total/(scores.length);
在displayResults
函数中使其清晰。 "<h2>Results </h2><br>Average Score = "+average+;
一个正确和清洁的版本。 请注意,你到底有一个+
! 你没有定义$(...)函数,所以我猜它是jquery。 我修了一下你的代码:
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">
您的代码中有几个问题:
scoreInput的类型为字符串。 您必须将其转换为数字才能执行实际的算术运算。
您已错过选择器中的ID或类符号( #,.
)。
当使用jQuery,你必须使用val()
不value
像$("#score").val()
同样$("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.