You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现基于成绩数组对学生姓名数组的排序功能?

没问题,我来帮你实现按成绩排序学生列表的功能,同时保留你原来的两个数组结构~

解决方案

你的核心需求是按成绩排序学生,同时让namn和betyg两个数组始终保持姓名与成绩的对应关系(排序后同一索引位置的姓名和成绩依然匹配)。直接排序两个独立数组容易出错,所以我们先把它们绑定成对象,排序后再拆分回原数组结构会更可靠。

完整代码实现

// 原始学生姓名与成绩数组
var namn = ["Tom", "John", "Hanna", "Adam", "Sofie"]; 
var betyg = ["B", "C", "A", "D", "E"]; 

// 新增:按成绩排序并更新两个数组的函数
function sortByGrade() {
    // 第一步:将姓名和成绩绑定为对象数组,锁定对应关系
    var studentArray = namn.map(function(name, index) {
        return {
            name: name,
            grade: betyg[index]
        };
    });

    // 定义成绩优先级(A最高,E最低),解决字母顺序与成绩等级相反的问题
    var gradePriority = {"A": 5, "B": 4, "C": 3, "D": 2, "E": 1};

    // 第二步:按成绩从高到低排序对象数组
    studentArray.sort(function(a, b) {
        return gradePriority[b.grade] - gradePriority[a.grade];
    });

    // 第三步:拆分回原数组结构,更新namn和betyg
    namn = studentArray.map(function(student) {
        return student.name;
    });
    betyg = studentArray.map(function(student) {
        return student.grade;
    });

    // 展示排序后的结果(可根据需求调整展示样式)
    displaySortedStudents();
}

// 新增:展示排序后的学生列表
function displaySortedStudents() {
    var resultDiv = document.getElementById('resultat');
    var sortedList = "";
    for(var i=0; i<namn.length; i++) {
        sortedList += `<p>${namn[i]}: ${betyg[i]}</p>`;
    }
    resultDiv.innerHTML = sortedList;
}

// 保留你原来的单个成绩查询功能(做了小优化)
function printGrade(namnInput) { 
  var namnetsbetyg = getGrade(namnInput); 
  // 找不到学生时显示提示,避免空白
  document.getElementById('resultat').innerHTML = namnetsbetyg || "找不到该学生"; 
} 

function getGrade(ettNamn) { 
  var ettBetyg; 
  for(var i=0;i<namn.length;i++) { 
    if(namn[i] === ettNamn) { 
      ettBetyg = betyg[i];
      break; // 找到匹配项后立即退出循环,提升效率
    } 
  } 
  return ettBetyg; 
} 
<input type="text" id="namn" placeholder="输入学生姓名"/> 
<input type="button" value="Få betyg" onclick="printGrade(document.getElementById('namn').value)"/> 
<!-- 新增排序按钮 -->
<input type="button" value="按成绩排序" onclick="sortByGrade()"/> 
<div id="resultat"></div>

关键细节解释

  • 绑定数组为对象:用map方法把两个独立数组合并成包含name和grade的对象数组,确保排序时不会打乱姓名与成绩的对应关系。
  • 成绩优先级映射:因为字母顺序(A<B<C)和成绩等级顺序(A>B>C)相反,所以用数值映射的方式,让排序逻辑更直观。
  • 拆分回原数组结构:排序完成后,再用map把对象数组拆分成两个独立数组,完全保留你原来的数组结构。
  • 原有功能优化:在查询函数里加了break提升性能,同时增加了找不到学生时的提示文本。

使用说明

点击「按成绩排序」按钮后,namn和betyg数组会自动更新为按成绩从高到低排序后的状态,页面会显示所有学生的排序结果;你原来的单个成绩查询功能依然可以正常使用,查询的是最新的数组对应关系。

内容的提问来源于stack exchange,提问作者J. Doe Foe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:37:30