【问题标题】:Javascript: Associative Array to Return Information Relating to an ObjectJavascript:返回与对象相关的信息的关联数组
【发布时间】:2015-02-11 01:32:07
【问题描述】:

我有一系列学生的姓名和他们在本学期获得的成绩。我怎样才能让我的 javascript 代码返回基于我的数组获得“A”级的所有学生的名字?我知道这很遥远,但这是我目前所拥有的。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Javascript</title>
    <script>
    var grades= [];

    grades [0] = "F";
    student [0] = "John";
    grades [1] = "D";
    student [1] = "George";
    grades [2] = "C";
    student [2] = "Bill";
    grades [3] = "B";
    student [3] = "Ted";
    grades [4] = "A";
    student [4] = "Rick";

    function getNames ()
    {

        for (var i =0;i <grades.length;i++)
            {
        if (grades[1] = "F")
            {
            document.getElementById("lowgrade").innerHTML= student[1];
            }
        else if(grades[1] = "D")
            {
            document.getElementById("midlowgrade").innerHTML= student[1];
            }
        else if(grades[1] = "C")
            {
            document.getElementById("midgrade").innerHTML= student[1];
            }
        else if(grades[1] = "B")
            {
            document.getElementById("highgrade").innerHTML= student[1];
            }
        else if(grades[1] = "A")
            {
            document.getElementById("bestgrade").innerHTML = student[1];
            }

    }

    </script>

</head>

<body>
    <h1>My Page</h1>
    <form name = "f1">
    Enter Grade<input type ="text" id="grades" name="wed" value="" /><br/>
    <input type="button" value="Check Student" onclick="getNames()" />
    </form>
    <div id="text" />

</body>

</html>

【问题讨论】:

  • 这么多问题,你使用 = 而不是 == 或 ===..... 你有 grads[1] 而不是 Grades[i]。在这里提问之前,你需要对自己的功课做一些基本的调试。
  • 您正在为每个ifs 分配值。查看comparisons

标签: javascript arrays associative-array


【解决方案1】:
function getStudentsByGrade(grade){
var grade_students = [];

for(var i=0;i < students.length;i++){
if(grades[i] == grade){
grade_students.push(students[i]);
}
}
return grade_students;
}

var grade_a_students = getStudentsByGrade("A");

【讨论】:

  • 你们都很棒,非常感谢。我对这整个事情非常陌生,这是一个巨大的帮助!
【解决方案2】:
function getNames(){
  for(var i = 0; i < grades.length; i++){
    if(grades[i] == "F"){
      document.getElementById("lowgrade").innerHTML = student[i];
    }
    else if(grades[i] == "D"){
      document.getElementById("midlowgrade").innerHTML = student[i];
    }
    else if(grades[i] == "C"){
      document.getElementById("midgrade").innerHTML = student[i];
    }
    else if(grades[i] == "B"){
      document.getElementById("highgrade").innerHTML = student[i];
    }
    else if(grades[i] == "A"){
      document.getElementById("bestgrade").innerHTML = student[i];
    }
  }
}

你犯的一些错误:

  1. 您使用了 1 而不是 i。
  2. 您使用 = 而不是 ==。
  3. 您忘记用 } 关闭 for。
  4. 您的标识有误。

【讨论】:

    【解决方案3】:
    var students = [
      {name: "John", grade: "F"},
      {name: "George", grade: "D"}
    ] //obviously fill the rest
    
    function getByGrade(grade){
      return students.filter(function(student){
        return student.grade.toUpperCase() == grade.toUpperCase();
      });
    });
    
    As = getByGrade('F');
    Bs = getByGrade('D');
    

    (等等)

    或者可能是这样的:

    ['A', 'B', 'C', 'D', 'F'].map(function(letter){
      return students.filter(function(student){
         return student.grade.toUpperCase() == letter; //if all the letters are uppercased already on the student objects then no need for `toUpperCase()`
      });
    });
    

    【讨论】:

    • 非常感谢!然后我如何让用户输入成绩并返回学生?我的意思是我如何允许输入,然后将此功能分配给一个按钮,该按钮将获取与该等级相关联的人的姓名?再次感谢您的帮助!
    • 我假设您是 javascript 的初学者,所以请继续 jsfiddle.net/#&togetherjs=ltDSRMVlrJ,我会帮助您。
    • 如果你愿意,我现在在等
    • 我保存了您的电子邮件,删除了该评论,以免看到此问题的人向您发送垃圾邮件。
    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多