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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:55:26