JavaScript 从数组对象中获取值不起作用

标签 javascript jquery arrays for-loop arrayobject

我正在做一个快速的 JavaScript 练习,您可以从下拉菜单中选择一个年级。计算机应该返回低于该特定年级的学生列表。年级是对象键。学生列表是对象值。我的大部分代码都有效。只是无法获取我选择打印的年级的学生名单。我试图循环遍历数组对象并将带有我选择的键的项目存储到空数组中,然后输出数组列表。

var listOfStudents = {
  "Freshman": "Janice Baker",
  "Sophomore": "Leon Rashad",
  "Freshman": "Jeff Grant",
  "Freshman": "Hazel Miles",
  "Junior": "Charlene Scott",
  "Junior": "Fatima Carr",
  "Senior": "Daniel Long",
  "Sophomore": "Candice Brown",
  "Sophomore": "Brian Seal",
  "Junior": "Tiffany Williams",
  "Senior": "Aaliyah Vick",
  "Senior": "Shawn Jackson",
  "Freshman": "Renee Carter",
  "Sophomore": "Russell Crane",
} // line above closes array object

var nameOfStudents = []; // empty array to store answers

function displayStudentsUnderClass(referenceList) {
  var gradeLevelSelected = $("#select-classification option:selected").val();

  /////// code above works. Returns whatever option you selected from list

  for (i = 0; i < referenceList.length; i++) {
    nameOfStudents.push(referenceList[gradeLevelSelected]);
  } // line closes for loop
  $("#studentResults").html("List of students that are <strong>" + gradeLevelSelected + "</strong>:<br/>" + nameOfStudents);
} // line closes function
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="classificationPage">
  <select id="select-classification" name="classification-list" class="classification-list">
    <option value="" selected="selected">- None -</option>
    <option value="Freshman">Freshman</option>
    <option value="Sophomore">Sophomore</option>
    <option value="Junior">Junior</option>
    <option value="Senior">Senior</option>
  </select>
  <p id="studentResults"></p> <button class="showStudents" onclick="displayStudentsUnderClass(listOfStudents)">Show Students</button>

最佳答案

code above works

不是真的。 :-) 例如,您的 listOfStudents 中没有 Janice Baker。看起来确实如此,但通过稍后在对象初始值设定项中使用相同的属性名称(“Freshman”),您已使用新值覆盖该属性。所以你的对象实际上只有这个:

var listOfStudents = {
  "Freshman": "Renee Carter",
  "Sophomore": "Russell Crane",
  "Junior": "Tiffany Williams",
  "Senior": "Shawn Jackson"
};

证明:

var listOfStudents = {
  "Freshman": "Janice Baker",
  "Sophomore": "Leon Rashad",
  "Freshman": "Jeff Grant",
  "Freshman": "Hazel Miles",
  "Junior": "Charlene Scott",
  "Junior": "Fatima Carr",
  "Senior": "Daniel Long",
  "Sophomore": "Candice Brown",
  "Sophomore": "Brian Seal",
  "Junior": "Tiffany Williams",
  "Senior": "Aaliyah Vick",
  "Senior": "Shawn Jackson",
  "Freshman": "Renee Carter",
  "Sophomore": "Russell Crane",
};
console.log(JSON.stringify(listOfStudents, null, 2));

您至少可以做以下几件事:

  • listOfStudents 设为数组,而不是对象,并在其中存储对象以及该人员所在类(class)的属性及其姓名。

  • 有单独的新生、二年级、三年级和四年级的数组,可能在一个具有类属性名称的对象中。

您的操作完全取决于您访问数据的方式。问题末尾的代码表明您将希望按年级访问列表,因此需要单独的数组:

var studentsByClass = {
  "Freshman": [
    "Janice Baker",
    "Jeff Grant",
    "Hazel Miles",
    "Renee Carter"
  ],
  "Sophomore": [
    "Leon Rashad",
    "Candice Brown",
    "Brian Seal",
    "Russell Crane"
  ],
  "Junior": [
    "Charlene Scott",
    "Fatima Carr",
    "Tiffany Williams"
  ],
  "Senior": [
    "Daniel Long",
    "Aaliyah Vick",
    "Shawn Jackson"
  ]
};

function displayStudentsUnderClass() {
  var gradeLevelSelected = $("#select-classification").val();
  var list = studentsByClass[gradeLevelSelected];
  if (list) {
      $("#studentResults").html("List of students that are <strong>" + gradeLevelSelected + "</strong>:<br/>" + list.join(", "));
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="classificationPage">
  <select id="select-classification" name="classification-list" class="classification-list">
    <option value="" selected="selected">- None -</option>
    <option value="Freshman">Freshman</option>
    <option value="Sophomore">Sophomore</option>
    <option value="Junior">Junior</option>
    <option value="Senior">Senior</option>
  </select>
  <p id="studentResults"></p> <button class="showStudents" onclick="displayStudentsUnderClass()">Show Students</button>

关于JavaScript 从数组对象中获取值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52101398/

相关文章:

javascript - 如何使用 Javascript 触发 CSS "hover state"?

javascript - html 标签的分割值

javascript - jQuery 获取表格行中的隐藏字段值

arrays - Swift 中数组的赋值和复制行为

c++ - 一些比普通循环和设置更快地分配和初始化数组的方法

javascript - 如何让我的代码在删除消息之前等待(discord.js)

javascript - 如何使用strongloop过滤include 'model'中的数据

javascript - Bootstrap 弹出窗口在表格中悬停几次后停止

php - 从数组中删除非整数项

c# - $.find 控件的 id 未定义