如何将数据集转换为对象以构建分支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
相关产品推荐
相关产品推荐

