Javascript 在用户向数组中输入另一个数字后计算数组的平均值
我有一个分数文本字段,用户必须输入介于0和100之间的值才能添加到数组中。显示结果后,应计算数组中数字的平均值。然而,每当我输入一个数字时,平均值都是非常高的。我该如何解决这个问题?(例如,数组[88,98,77,88]并输入数字99,平均值跳至7039) 我的代码:Javascript 在用户向数组中输入另一个数字后计算数组的平均值,javascript,html,Javascript,Html,我有一个分数文本字段,用户必须输入介于0和100之间的值才能添加到数组中。显示结果后,应计算数组中数字的平均值。然而,每当我输入一个数字时,平均值都是非常高的。我该如何解决这个问题?(例如,数组[88,98,77,88]并输入数字99,平均值跳至7039) 我的代码: var得分=[88,98,77,88]; var addScore=函数(){ var scoreInput=$(“分数”)。值; 如果(scoreInput.length==0 | | scoreInput>100 | | s
var得分=[88,98,77,88];
var addScore=函数(){
var scoreInput=$(“分数”)。值;
如果(scoreInput.length==0 | | scoreInput>100 | | scoreInput<0 | | isNaN(scoreInput)){
警报(“您必须输入有效分数”);
}否则{
分数。推送(分数输入);
}
}
var displayResults=函数(){
var最高=数学最大值(…分数);
var合计=0;
对于(变量i=0;i平均分数=“+Average+”;
$(“结果”).innerHTML=输出;
};代码>数组接收的是字符串而不是数字。在进行数学运算之前,必须使用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 addScore=函数(){
var scoreInput=$(“#score”).value;//或“.score”
scoreInput=parseFloat(scoreInput);//此处。如果无效,则返回NaN。
如果(scoreInput>100 | | scoreInput<0 | | isNaN(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;
};
var得分=[88,98,77,88];
var addScore=函数(){
var scoreInput=$(“分数”)。值;
scoreInput=parseInt(scoreInput);
如果(scoreInput.length==0 | | scoreInput>100 | | scoreInput<0 | | isNaN(scoreInput)){
警报(“您必须输入有效分数”);
}否则{
分数。推送(分数输入);
}
}
var displayResults=函数(){
var最高=数学最大值(…分数);
var合计=0;
对于(变量i=0;i平均分数=”+平均;
$(“结果”).innerHTML=输出;
};
它应该会起作用
所作的修改:
scoreInput=parseInt(scoreInput)在addScore
函数中的code>,以便在进行任何比较之前首先将值转换为整数李>
var平均值=总/(分数.长度)代码>在显示结果中
功能使其清晰李>
清理“结果
平均分数=“+Average+”将代码>更改为正确且更清晰的版本。请注意,您最后有一个+
李>
您没有定义$(…)函数,所以我猜它是jquery。我对您的代码做了一些修改:
- 将var
scoreInput=$(“score”).value
更改为$(.score”)[0]。value代码>(这将读取带有“.score”类的输入并将其转换为数字)
- 将
$(“.results”).innerHTML
更改为$(“.results”)[0]。innerHTML
- 简化
addScore
var得分=[88,98,77,88];
var addScore=函数(){
var scoreInput=+$(“.score”)[0]。值;
如果(isNaN(scoreInput)| scoreInput>100){
警报(“您必须输入有效分数”);
}否则{
分数。推送(分数输入);
显示结果();
}
}
var displayResults=函数(){
var最高=数学最大值(…分数);
var合计=0;
对于(变量i=0;i平均分数=”+平均;
$(“.results”)[0].innerHTML=输出;
};代码>
添加
您的代码中有几个问题:
scoreInput的类型为string。您必须将其转换为数字才能执行实际的算术运算
选择器中缺少id或类符号(#,.
)
使用jQuery时,必须使用val()
而不是value
像$(“#分数”).val()
类似地,$(“结果”).innerHTML=输出代码>应该是$(“#结果”).html(输出)代码>
请尝试以下方法:
var得分=[88,98,77,88];
var addScore=函数(){
var scoreInput=$(“#score”).val().trim();
但是,如果(!scoreInput | | scoreInput>100 | | scoreInput平均值的计算没有任何结果
var得分=[88,98,77,88];
var average=得分。减少((a,b)=>a+b)/scores.length;
console.log(average);
输入值是字符串。当您添加两个字符串,如“10”+“25”
,结果是“1025”
。在添加到数组之前,请尝试将它们转换为数字。您可以使用parseInt()
:scores.push(parseInt(scoreInput))
,或者简而言之,一元+
运算符:得分。push(+scoreInput)
@TylerRoper的答案几乎肯定是正确的。我只想指出,有一个错误会阻止代码示例运行:var output=“Results
Average Score=”+average+;
将产生语法错误。将来,一个重现该问题的代码片段对于社区帮助您非常有用。@TylerRoper明白了,谢谢!@lena您使用jquery吗?如果不是,$(…)的定义是什么
?问题说0是一个有效的输入,因此!scoreInput
不会产生正确的结果。@Mamun无法从OP的示例中确定这一点。他没有提到或标记jQuery,他没有在$
方法中使用查询选择器语法,并且他的错误与这是一个问题的想法不一致。I imag他只是用$
作为getElementById
的简写,即const$=docum