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

如何遍历动态键名对象,筛选成绩合格的学生姓名列表

解决方案

可以通过以下几种常用方法实现需求,核心思路是遍历对象的所有值(或键值对),筛选出成绩合格的学生后提取姓名:

方法1:Object.values() + filter() + map()(简洁函数式写法)

直接获取对象的所有值,过滤出result为pass的项,再映射提取学生姓名:

const schoolObj = {
  class10: { studentName: 'John', result: 'pass' },
  class11: { studentName: 'Alis', result: 'pass' },
  class12: { studentName: 'Nick', result: 'fail' },
};

const students = Object.values(schoolObj)
  .filter(item => item.result === 'pass')
  .map(item => item.studentName);

console.log(students); // 输出: ['John', 'Alis']

方法2:Object.entries()遍历键值对

如果需要同时访问动态键名(如class10)和对应学生信息,可使用Object.entries()获取键值对数组后处理:

const schoolObj = {
  class10: { studentName: 'John', result: 'pass' },
  class11: { studentName: 'Alis', result: 'pass' },
  class12: { studentName: 'Nick', result: 'fail' },
};

const students = [];
for (const [className, studentInfo] of Object.entries(schoolObj)) {
  // 此处可拿到动态键名className
  if (studentInfo.result === 'pass') {
    students.push(studentInfo.studentName);
  }
}

console.log(students); // 输出: ['John', 'Alis']

方法3:for...in循环(兼容旧环境)

若需兼容ES6之前的环境,for...in是传统的对象键名遍历方式:

const schoolObj = {
  class10: { studentName: 'John', result: 'pass' },
  class11: { studentName: 'Alis', result: 'pass' },
  class12: { studentName: 'Nick', result: 'fail' },
};

const students = [];
for (const className in schoolObj) {
  // 加hasOwnProperty判断,避免遍历原型链上的属性
  if (schoolObj.hasOwnProperty(className)) {
    const studentInfo = schoolObj[className];
    if (studentInfo.result === 'pass') {
      students.push(studentInfo.studentName);
    }
  }
}

console.log(students); // 输出: ['John', 'Alis']

注意:原代码中的John、Alis、pass、fail需用引号包裹,否则会被当作未定义变量导致报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:59:55