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

基于用户加入码添加Google Classroom课程ID的实现问题

解决Google Classroom API匹配课程ID时的数组构建问题

需求说明

用户表格中存储的课程数据对应数组userClassCodes,格式为[['课程名', '加入码'], ...](允许空值)。需要调用Google Classroom API获取自身的活跃课程,给每个数组条目追加对应课程ID:若加入码在API响应中匹配到,就追加课程ID;无匹配则追加空字符串,最终得到[课程名, 加入码, 课程ID/空]格式的数组。

原代码的问题

原代码的核心逻辑错误是嵌套循环顺序颠倒:先遍历API返回的每一门课程,再遍历所有用户条目,导致每一门课程都会把所有用户条目重复推送一次,最终数组长度变成「课程数 × 用户条目数」,且同一个条目会被多次添加(匹配到的条目会在对应课程循环里带ID,其他循环里带空值),完全不符合预期。

修正后的代码

function googleClassroomImport() {
  var userClassCodes = SpreadsheetApp.getActive().getRange("Sheet1!A1:B25").getValues();
  var newArray = [];
  var options = {
    teacherId: 'me',
    courseStates: 'ACTIVE',
    pageSize: 50
  };
  var response = Classroom.Courses.list(options);

  // 构建加入码→课程ID的映射对象,把查找效率从O(n)降到O(1)
  var enrollmentCodeToId = {};
  if (response.courses) { // 兼容API返回空的情况(比如无活跃课程)
    response.courses.forEach(function(course) {
      enrollmentCodeToId[course.enrollmentCode] = course.id;
    });
  }

  // 遍历用户的每一条课程条目,确保每个条目只被处理一次
  userClassCodes.forEach(function(item) {
    var className = item[0];
    var enrollmentCode = item[1];
    // 匹配加入码,找不到则用空字符串
    var courseId = enrollmentCodeToId[enrollmentCode] || "";
    newArray.push([className, enrollmentCode, courseId]);
  });

  console.log(newArray);
}

关键改进点

  • 优化查找效率:用对象存储加入码与课程ID的映射,避免每次匹配都遍历全部课程;
  • 修正遍历逻辑:先处理用户的每一条数据,确保每个条目只被添加一次;
  • 兼容边界情况:增加API返回空的判断,避免报错;
  • 支持空值处理:若用户条目的加入码为空,自动追加空字符串作为课程ID,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:01:24