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

基于JavaScript实现数学成绩达标筛选的技术问询

代码逻辑校验结果

需求回顾

若数学成绩>50,则输出该记录;否则提示“请重试”。

原代码片段(整理后)

students.forEach(student => {
  if(student.sub.math > 50) {
    result.push({
      name: student.name,
      Subject: student.sub,
      marks: Object.values(student.sub).reduce((a, b) => a + b),
      Average: Object.values(student.sub).reduce((a, b) => a + b/300)
    })
  } else {
    console.log('Try again');
  }
});
console.log(result)

存在的逻辑与语法问题

  • 语法错误:原代码箭头函数调用写法不规范,students.forEach需直接衔接括号包裹的回调函数;Average字段的reduce计算缺少闭合括号,会导致代码无法运行。
  • 平均值计算逻辑错误:a + b/300的累加方式完全错误,正确的平均值应该是总分除以科目数量,而非每个分数单独除以300再相加。
  • 提示信息触发逻辑不严谨:只要有一个学生数学成绩≤50就会打印一次Try again,多学生不达标时会重复输出,且未明确对应学生,不利于定位问题。
  • 变量未声明:result变量未提前声明,直接使用会抛出未定义错误。

修正后的代码示例

const result = [];
students.forEach(student => {
  // 可选链操作符避免sub或math属性不存在时报错
  if (student.sub?.math > 50) {
    const totalMarks = Object.values(student.sub).reduce((a, b) => a + b, 0);
    const subjectCount = Object.values(student.sub).length;
    const average = totalMarks / subjectCount;
    result.push({
      name: student.name,
      Subject: student.sub,
      marks: totalMarks,
      Average: average.toFixed(2) // 保留两位小数提升可读性
    });
  } else {
    console.log(`学生${student.name}数学成绩未达标,请重试`);
  }
});
console.log(result);

内容的提问来源于stack exchange,提问作者Dhimesh Parmar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:25:41