我在使用过滤器和映射函数从数组中的第三列(从 Gsheet 获取)检索电子邮件地址时遇到问题。该调用正在日志中打印一个空数组。有人可以解释一下我做错了什么吗?
这是函数:
/**
* 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(',');
}
假设您拥有的数据实际上与您在评论中提供的数据类似,这应该可以满足您的要求。
const data = [
['A', 'a', '[email protected]'],
['B', 'b', '[email protected]'],
['C', 'c', '[email protected]'],
['D', 'd']
];
const emailAddresses = data.map((listItem) => listItem[2] || false).filter(Boolean);
console.log('emailAddresses: ', emailAddresses);