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

如何对比两个array.map输出的数据,实现考生考试成绩自动计算

评分功能实现方案

问题修正

你原有代码中遍历participants1时属性名拼写错误,学生答案存储在elem.answers中,不是elem.answer,这会导致你无法拿到学生的作答数据。另外map方法适用于生成新数组,若仅需遍历打印日志,使用forEach更合理。

核心实现思路

你不需要构造两个转换对象,仅需将标准答案数组预处理为以题目ID为键的索引对象即可,一次预处理所有学生都可以复用,比对答案时可以直接O(1)取值,性能和可读性都更好。

完整实现代码

// 1. 预处理标准答案为索引表,key为题目id,value存储正确答案和对应分值
const answerKeyMap = answerKey.reduce((acc, question) => {
  acc[question.id] = {
    correct: question.answerKey,
    score: question.score
  }
  return acc
}, {})

// 2. 遍历所有学生,计算得分
const participantsWithScore = participants1.map(student => {
  let totalScore = 0
  // 遍历所有考题,逐一比对答案
  answerKey.forEach(question => {
    const qid = question.id
    // 学生该题答案和正确答案匹配则加分
    if (student.answers[qid] === answerKeyMap[qid].correct) {
      totalScore += answerKeyMap[qid].score
    }
  })
  // 返回扩展了总分属性的学生信息
  return {
    ...student,
    totalScore
  }
})

// 测试输出结果
console.log(participantsWithScore)
/*
输出结果中两名学生的得分分别为30、50,符合预期
*/

常见问题说明

  • 如何正确访问elem.id/elem.answerKey/elem.score属性:answerKey数组的每一项本身就携带这些属性,直接遍历数组即可正常访问,你原有写法没有问题,只是没有利用返回值做后续处理。
  • 有没有更简便的实现:上述实现就是生产环境常用的最简方案,不需要引入额外依赖,逻辑清晰,就算后续题目量、学生量大幅提升也能保持不错的性能。

内容的提问来源于stack exchange,提问作者Vincentius Heri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:45:05