Google Form含可选/跳转问题时,如何用getItemResponses获取特定响应?
解决Google Form中
getItemResponses()因可选/跳转问题导致的响应数量变化问题 不要依赖问题索引定位响应——可选问题未填写、跳转逻辑触发时,itemResponses的顺序和数量都会变动,用问题的唯一ID匹配响应才是可靠方案,具体实现方式如下:
1. 提前建立表单问题的ID映射
先获取表单所有问题的ID与对应标识(比如标题)的映射,方便后续通过ID快速定位问题:
// 获取目标表单 const form = FormApp.openById("你的表单ID"); const formItems = form.getItems(); // 建立ID到问题标题的映射(也可存储其他自定义标识) const itemIdMap = {}; formItems.forEach(item => { itemIdMap[item.getId()] = item.getTitle(); });
2. 通过ID匹配目标问题的响应
处理提交的响应时,遍历itemResponses,用问题ID精准匹配你需要的响应,完全无需依赖索引:
function processResponse(response) { const itemResponses = response.getItemResponses(); // 假设要找标题为"联系方式"的问题响应,先从映射中拿到对应ID const targetItemId = Object.keys(itemIdMap).find(id => itemIdMap[id] === "联系方式"); // 查找对应ID的响应条目 const targetResponse = itemResponses.find(ir => ir.getItem().getId() === targetItemId); // 处理结果:存在响应则取值,不存在则设为默认值(比如空字符串) const contactInfo = targetResponse ? targetResponse.getResponse() : ""; // 后续业务逻辑... }
3. 批量处理所有问题的响应
如果需要覆盖表单所有问题(包括未被用户填写/跳过的),可以结合ID映射逐个检查响应状态:
function processAllResponses(response) { const itemResponses = response.getItemResponses(); const allResponses = {}; // 遍历所有问题ID,逐个匹配响应并记录状态 Object.keys(itemIdMap).forEach(itemId => { const responseItem = itemResponses.find(ir => ir.getItem().getId() === itemId); allResponses[itemIdMap[itemId]] = responseItem ? responseItem.getResponse() : "未填写/未触发"; }); // allResponses中包含所有问题的响应状态 console.log(allResponses); }
这种方式彻底规避了索引变动的问题,不管是可选问题未填,还是跳转逻辑跳过某些问题,都能准确获取用户实际提交的响应,同时清晰标记未处理的问题。
内容的提问来源于stack exchange,提问作者Vincent Tay
相关产品推荐
相关产品推荐

