使用Filter&Map函数无法从Google Sheets数组获取第3列邮箱求助
问题:使用filter和map从Google Sheets数组提取第3列邮箱时返回空数组
在通过Google表单提交事件,结合filter和map函数从Google Sheets数据中提取对应邮箱地址时,日志输出为空数组,请求分析问题原因。
相关代码
/** * Retrieves email addresses from a sheet based on selected names from a form. * * @param {object} e - Form submit event object. * @return {string} - A comma-separated string of email addresses. */ function getEmailAddresses(e) { // Get the responses from the form. const responses = e.response.getItemResponses(); // Extract the selected names from the checkboxes. const eList = responses.find(item => item.getItem().getTitle() === 'E List').getResponse(); // Get the spreadsheet and sheet. const ss = SpreadsheetApp.openById("SHEET_ID"); const shet = ss.getSheetByName('ECI'); const data = shet.getRange(2, 1, shet.getLastRow()-1, 3).getValues(); // Logger.log(data); // Filter the data based on selected names and extract email addresses. // Assuming first name is in column 1 and last name in column 2 // Assuming email is in column 3 const emailAddresses = data.filter(row => eList.includes(`${row[0]} ${row[1]}`)).map(row => row[2]); Logger.log(emailAddresses); // Return the email addresses as a comma-separated string. return emailAddresses.join(','); }
相关数据
eList(表单选中的名单数据)
| 名 | 姓 | 邮箱 | 电话 |
|---|---|---|---|
| A | a | A@email.com | 12345 |
| B | b | B@email.com | 67890 |
| C | c | C@email.com | 12346 |
data(从Sheets获取的数组数据)
| 名 | 姓 | 邮箱 |
|---|---|---|
| A | a | A@email.com |
| B | b | B@email.com |
| C | c | C@email.com |
问题原因分析
- eList数据格式不匹配:代码里
eList是通过表单复选框getResponse()获取的,该方法返回的是选中选项的字符串数组(比如["A a", "B b"]),但你提供的eList是多列表格结构,说明你误解了返回格式。如果表单复选框的选项不是"名 姓"的组合格式(比如选项是单独的名/姓,或格式为"姓,名"),eList.includes(${row[0]} ${row[1]})就会匹配失败,导致filter后得到空数组。 - 字符匹配细节问题:即便选项格式是
"名 姓",也要检查Sheets单元格里的row[0]/row[1]是否有多余空格、大小写不一致(比如表单选项是"A A"但Sheets里是"A a"),这些差异会让includes判断为false。 - 表单标题匹配错误:
responses.find(item => item.getItem().getTitle() === 'E List')如果表单复选框的标题不是完全一致的"E List"(比如大小写、空格差异,如"e list"或"E list"),会导致find返回undefined,调用getResponse()直接报错,后续逻辑无法执行。 - 数据范围获取错误:
shet.getRange(2, 1, shet.getLastRow()-1, 3)如果表格第一行不是表头,或getLastRow()返回的行数不准确(比如表格存在空白行导致行数统计偏少),会让data数组为空或不包含目标数据,filter后自然为空。
内容的提问来源于stack exchange,提问作者Mikal D Chavez
相关产品推荐
相关产品推荐

