javascript - 如果满足条件后语句不停止
问题描述
我有这段代码根据我在谷歌表中的列表检查电子邮件的发件人。
假设我的列表有两列(姓名和电子邮件)。
列名,第一行:“Google”
列电子邮件,第一行:“some.one@google.com”。
然后我收到一封来自“some.one@google.com”的电子邮件。
我的脚本将接收该电子邮件,检查我的列表中是否有它,如果有,它将获取此人的姓名,在这种情况下为“Google”。
如果我收到来自某人.else@google.com 的电子邮件,我仍然希望它获得名称“Google”,但现在基于域。
该脚本运行良好,但是如果我添加第二行名称 =“Google 2”和电子邮件 =“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
}
}
解决方案
正如 Jeremy Tille 所说,您可以使用 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
推荐阅读
- javascript - JS 对象更改为 true,仍视为 false
- javascript - Rails:sign_out current_user 不工作?
- sql - equi join 是否返回重复的列
- amazon-web-services - aws 个性化是否支持搜索引擎?
- c# - asp.net 和 c# 在下拉列表中禁用上个月
- python - 从 Jupyter Notebook 连接到 Db2 的问题
- json - jq - 当键/值在不同文件中时组合多个 if 条件
- c# - 在 wpf C# 中禁用自定义父项时启用子控件
- bash - 在 bash 中使用数组来更改每个循环中创建的文件夹的名称
- perl - 詹金斯用反斜杠跑线