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

如何将数据集转换为对象以构建分支Google表单?求最优结构

需求与实现方案

一、数据转换需求

要将包含年级组与对应俱乐部安排的表格数据,转换为如下结构的对象数组,用于创建分支Google表单:

let data = [
  {
    "Year Group": "Year Six",
    "Sunday": ["Girl's football"],
    "Monday": ["No clubs on this day"],
    "Tuesday": ["Girls Netball"] 
  },
  {
    "Year Group": "Year Five",
    "Sunday": ["Boys football"],
    "Monday": ["No clubs on this day"],
    "Tuesday": ["Girls Netball"]
  }
]

后续调整为仅在年级组对象中存储该年级独有的日期,避免冗余数据。

二、适配需求的实现代码

以下是基于TheWizEd思路改编的Google Apps Script代码,可直接在表格脚本中运行:

function convertToYearGroupData() {
  const ws = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let values = ws.getDataRange().getValues();
  let data = [];
  values.shift();  // 移除表头行

  // 获取所有不重复的年级组
  let yearGroups = [...new Set(values.map(row => row[1]))];
    
  yearGroups.forEach((group) => {
    // 筛选当前年级组的所有数据行
    let groupRows = values.filter(row => row[1] === group);
    // 获取当前年级组涉及的所有日期
    let days = [...new Set(groupRows.map(row => row[4]))];
    // 初始化每个日期对应的俱乐部数组
    let clubArrays = days.map(() => []);

    // 填充每个日期的俱乐部数据
    groupRows.forEach(row => {
      let dayIndex = days.indexOf(row[4]);
      if (dayIndex >= 0) {
        clubArrays[dayIndex].push(row[0]);
      }
    });

    // 构建年级组对象
    let yearGroupObj = { "Year Group": group };
    days.forEach((day, index) => {
      yearGroupObj[day] = clubArrays[index];
    });
    data.push(yearGroupObj);
  });

  return data;
}

三、适配Google表单分支的结构建议

当前结构已经适配表单分支的层级逻辑:以年级组为顶层区分,每个年级对象下直接挂载对应日期的俱乐部列表。如果要进一步简化表单分支的关联逻辑,可以给每个俱乐部选项增加表单节点关联字段,例如:

{
  "Year Group": "Year Six",
  "Sunday": [{"name": "Girl's football", "formItemId": "item_123"}],
  "Monday": [{"name": "No clubs on this day", "formItemId": "item_456"}]
}

这样生成表单分支时,能直接通过formItemId定位到对应的表单选项,减少匹配逻辑的复杂度。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:40:14