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

如何基于学生数组对象属性创建GPA≥3.5的学生姓名新数组?

问题分析与修正

你的代码存在几个关键错误,导致控制台输出undefined且无法正确筛选出符合条件的学生:

  1. 错误访问数组元素属性
    你直接使用students.gpa和students.name,但students是整个数组,并非单个学生对象。必须通过索引i访问数组里的具体元素,即students[i](更规范的做法是使用函数参数studentList[i],避免依赖全局变量)。

  2. 提前return终止函数
    return deansList.push(students.name)会在第一次找到符合条件的学生时,直接返回push方法的返回值(数组新长度),同时终止函数,后续学生不会被遍历。而且push的返回值是数字,并非你需要的结果数组。

  3. 函数未返回最终结果
    循环结束后,你没有返回deansList数组,因此调用函数时默认返回undefined。

  4. 未声明循环变量
    i = 0没有用let/var声明,会导致i成为全局变量,属于不良编程习惯。


修正后的代码

const students = [
  { name: "Paisley Parker", gpa: 4.0 },
  { name: "Lake Herr", gpa: 3.2 },
  { name: "Promise Lansing", gpa: 3.9 },
  { name: "Friar Park", gpa: 2.8 },
  { name: "Mason Amitie", gpa: 3.49 }
]

function getDeansList(studentList) {
  let deansList = [];
  // 声明局部循环变量i,遍历函数传入的studentList
  for(let i = 0; i < studentList.length; i++) {
    const student = studentList[i]; // 提取当前学生对象,提升代码可读性
    if(student.gpa >= 3.5) {
      deansList.push(student.name); // 仅添加姓名,不提前返回
    }
  }
  return deansList; // 循环结束后返回结果数组
}

console.log(getDeansList(students)) // 输出: ["Paisley Parker", "Promise Lansing"]

更简洁的写法(推荐)

针对数组筛选场景,JavaScript的filter+map组合写法更简洁易懂,也能避免手动循环的常见错误:

function getDeansList(studentList) {
  return studentList
    .filter(student => student.gpa >= 3.5) // 先筛选GPA符合条件的学生对象
    .map(student => student.name); // 再提取这些学生的姓名
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:55:45