我有一段代码根据我在谷歌表格中的列表检查电子邮件的发件人。
假设我的列表有两列(姓名和电子邮件)。
列名,第一行:“Google”
列电子邮件,第一行:“some.one@google.com”。
然后我收到一封来自“some.one@google.com”的电子邮件。
我的脚本会接收那封电子邮件,检查我的列表中是否有它,如果有,它会得到这个人的名字,在这种情况下是“谷歌”。
如果我收到来自 someone.else@google.com 的电子邮件,我仍然希望它获得名称“Google”,但现在基于域。
脚本运行良好,但是如果我添加第二行 name = "Google 2" 和 email = "random.email@google.com",并且我收到一封来自 "some.one@google.com" 的电子邮件,它会在我的列表中找到它,但它会继续到 else if 位,它也会按域找到它。
按域搜索时会找到 Google 和 Google 2。我希望它在第一次满足条件时停止,并使用谷歌。现在,它继续运行并获取最后一个结果,Google 2。我认为 if/else 语句在第一次满足条件后停止。
如果它通过“if”并且满足条件,我希望它停止,而不是继续“else if”并返回它找到的最后一个结果。
for (let j = 2; j < lastRowMySpreadsheet; j++) {
let emailInMyList = mySpreadsheet.getRange(j, 2).getValue();
/// domainInMyList gets the column with the domains ie: "whatever@google.com" would show as only "google" in this column.
let domainInMyList = mySpreadsheet.getRange(j, 3).getValue();
if (emailFromGmail === emailInMyList) {
sourceName = mySpreadsheet.getRange(j, 1).getValue();
/// do other stuff too
} else if (onlyEmailDomain === domainInMyList) {
sourceName = mySpreadsheet.getRange(j, 1).getValue();
/// do other stuff too
}
}
答案 0 :(得分:2)
正如 Jeremy Thille 所说,你可以使用 break;
for (let j = 2; j < lastRowMySpreadsheet; j++) {
let emailInMyList = mySpreadsheet.getRange(j, 2).getValue();
let domainInMyList = mySpreadsheet.getRange(j, 3).getValue();
if (emailFromGmail === emailInMyList) {
sourceName = mySpreadsheet.getRange(j, 1).getValue();
break; // Terminate after first find
} else if (onlyEmailDomain === domainInMyList) {
sourceName = mySpreadsheet.getRange(j, 1).getValue();
/// do other stuff too
break; // If first find is a priorite DO NOT put break here;
}
}
但是,对于性能问题,我建议像这样一次性处理所有行
var rows = SpreadsheetApp.getDataRange().getValues();
var emailMatched = rows.filter(row => row[1] == emailFromGmail);
var domainMatched = rows.filter(row => row[2] == domainInMyList);
Logger.log(emailMatched) // All matched email rows
Logger.log(domainMatched) // All matched domain rows
Logger.log(emailMatched[0][0]) // First source name matched
Logger.log(domainMatched[0][0]) // First domain name matched