javascript - 数组并显示为未定义

标签 javascript jquery arrays undefined

我的项目是根据学生数量和分数制作类(class)报告。在我的项目中,我需要显示学生的姓名和分数、平均分以及类(class)中的最低和最高成绩。在我的代码中,当我到达发布类(class)报告的部分时,最后一个学生的姓名和分数被读取为未定义和未定义。然后它会影响我的平均值,即 NaN 以及最低和最高分数。如果有人能修复我的代码那就太棒了!对我做错了什么的解释也非常感谢。

<script type="text/javascript">
            var Names = [];
            var Marks = [];
            var sum = 0;
            var average = 0;
            var lowest = 99999999;
            var lowestStudent;
            var highest = -10000000;
            var highestStudent;

            $("#btnBoxes").click(function(){
                $("#divOutput1").hide();
                var number = GetInteger("txtNumber");

            if (number >= 1){
                GenerateTextandButton(number);

                $("#btnReport").click(function(){
                    $("#divOutput2").hide();
                    InputintoArrays(number);
                    CalculateAverage();
                    ChecklowestMark();
                    CheckhighestMark();
                    Report();
                });

            }else{

                    $("#divOutput2").html("Please insert a number greater than 1.");

                }
            });

function GetInteger(num){
            var number = parseInt($("#"+ num).val());
            if(isNaN(number) === true){
            return 0;
            }else{
            return number;
            }
        };    
function GenerateTextandButton(x){
        for(y=1;y<=x;y++){
        $("#divOutput2").append("Student " + y + "<br><input type='text' id='txtName" + y + "' value='Insert Name'><br><input type='text' id='txtMark" + y + "' value='Insert Mark'><br><br>");
        }
        $("#divOutput2").append("<br><input type='button' id='btnReport' value='Generate'>");
    };

function InputintoArrays(x){
        for(y=1;y<x;y++)
            Names[y]=$("#txtName" + y).val();
            Marks[y]=parseInt($("#txtMark" + y).val());
        }
    };
function CalculateAverage(){
        for(y=1;y<=Marks.length;y++){ 
               sum = sum + Marks[y];
        }     
            average = sum / Marks.length;

    };

function ChecklowestMark(){

        for(y=1;y<=Marks.length;y++){
            if(Marks[y] <= lowest){ 
            lowest = Marks[y];
            lowestStudent = Names[y]; 
            }
        }        
    };

function CheckhighestMark(){

        for(i=1;i<=Marks.length;i++){ 
            if(Marks[i] >= highest){ 
            highest = Marks[i];
            highestStudent = Names[i]; 
            }
        }
    };

function Report(){

        $("#divOutput3").html("<b>Marks:</b> <br><br>");
            for(y=1;y<=Marks.length;y++){ 
                $("#divOutput3").append("<i>" + Names[y] + '</i>: ' + Marks[y] + "<br>");
            }
        $("#divOutput3").append("<br><u>Average Mark:</u> " + average.toFixed("2"));
        $("#divOutput3").append("<br><u>Lowest Mark:</u> <i>" + lowestStudent + "</i> " + lowest);
        $("#divOutput3").append("<br><u>Highest Mark:</u> <i>" + highestStudent + "</i> " + highest);
    };

最佳答案

您的循环通常编写如下:

for (y = 1; y <= Marks.length; y++) { ... }

这没问题,但大多数程序员都会这样做:

for (y = 0; y < Marks.length; y++) { ... }

这意味着您正在访问 Names[1]、Names[2] 和 Names[3](而不是通常更正确的 Names[0]、Names[1] 和 Names[2])。

现在,请注意在您的函数中

function InputintoArrays(x){
        for(y=1;y<x;y++) {
            Names[y]=$("#txtName" + y).val();
            Marks[y]=parseInt($("#txtMark" + y).val());
        }
 };

你的控件显示for(y=1;y<x;y++)而不是for(y=1;y<=x;y++) ,所以您没有插入最终名称。更改y<xy<=x一切都应该没问题。或者更好的是,从 0 开始所有控制循环并使用 < 进行测试。而不是<= .

关于javascript - 数组并显示为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834426/

相关文章:

javascript - 解析之前更改 Meteor.Collection

java - 将项目战略性地放置在具有最小重叠连接的容器中的逻辑

javascript - 必须将视频从 JSON 对象加载到 div 中,这可以通过 knockout 来完成吗?

javascript - 如何从父文档访问 iframe 中的元素?

php - 使用 $.post() 将值发送到 PHP 并使用 $.getJSON 返回

jquery - 实现交叉淡入淡出的图像效果

arrays - 带闭包的数组扩展

javascript - jQuery 事件滚动顶部

objective-c - 当您在带有数组的数组中调用方法removeAllObjects 时会发生什么?

javascript - ng-src 无法正常工作