Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在用户向数组中输入另一个数字后计算数组的平均值_Javascript_Html - Fatal编程技术网

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

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

我有一个分数文本字段,用户必须输入介于0和100之间的值才能添加到数组中。显示结果后,应计算数组中数字的平均值。然而,每当我输入一个数字时,平均值都是非常高的。我该如何解决这个问题?(例如,数组[88,98,77,88]并输入数字99,平均值跳至7039)

我的代码:

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