如果满足条件后语句不停止

时间:2021-02-03 15:35:34

标签: javascript google-apps-script google-sheets

我有一段代码根据我在谷歌表格中的列表检查电子邮件的发件人。

假设我的列表有两列(姓名和电子邮件)。

列名,第一行:“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
  }
}

1 个答案:

答案 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