如何实现基于成绩数组对学生姓名数组的排序功能?
没问题,我来帮你实现按成绩排序学生列表的功能,同时保留你原来的两个数组结构~
解决方案
你的核心需求是按成绩排序学生,同时让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
相关产品推荐
相关产品推荐

