Warm tip: This article is reproduced from serverfault.com, please click

javascript-.findIndex()

(javascript - .findIndex())

发布于 2020-11-29 02:15:46

问题

.findIndex()正在中断。我正在为它提供一个字符串,但它的意思是“这不是一个函数”

目标/背景

自动回复物业查询

函数执行以下操作:

  • 扫描收件箱以识别查询。

  • 分解电子邮件,将数据存储在变量中。

  • 扫描电子表格,其中包含有关我们所有待售房屋的信息。将电子邮件中的属性ID与寻找匹配项的电子表格进行匹配。

  • 使用存储在电子表格中与该属性匹配的数据回复电子邮件。

我要去哪里

我能够识别电子邮件。然后,我可以浏览电子邮件并提取相关信息。

编码

function autoReply() {
var queryInbox = "is:unread from:(example@gmail.com) to:(example@gmail.com) Example Text:"; // Email Identification
var locatedEmail = GmailApp.search(queryInbox); // Search Inbox for Identification
locatedEmail.forEach(thread => {
  var messages = thread.getMessages();
  if (messages.length === 1) {
    // BREAKING DOWN THE EMAIL
    var msgBody = messages[0].getPlainBody();
    var identityNumber = msgBody.split("\n")[1].replace('Property ID: ','');
  
    // SPREADSHEET      
    var SS = SpreadsheetApp.openById('exampleId').getSheetByName("Sheet1");
    var column = 1; // column Index
    var columnValues = SS.getRange(2, column, SS.getLastRow()).getValues(); //1st is header row
    var searchResult = columnValues.findIndex(identityNumber); //Row Index - 2
    var rowID = searchResult + 2;
  
    var houseAddress = SS.getRange(rowID, 2).getValue();
  
    // EMAIL BODY
    var body = "<p>Hi, thank you for emailing us about " + houseAddress + ".</p>";
    var options = { name: "Property Enquiry", htmlBody: body };
    thread.reply(body, options);
    thread.markRead();
    thread.moveToArchive();
  }
});
}

电子邮件示例

在此处输入图片说明

电子表格示例 在此处输入图片说明

附加信息:错误显示它正在将propertyID作为字符串传递给.findIndex。

在此处输入图片说明

Questioner
Bjaeg
Viewed
0
Tanaike 2020-11-29 10:35:08

修改要点:

  • 在你的脚本中,columnValuesofvar columnValues = SS.getRange(2, column, SS.getLastRow()).getValues()是二维数组,例如[["sample1"],["sample2"],["sample3"],,,]和的参数findIndex是一个函数。我认为你的问题的原因是由于此。
  • 当你想searchResult使用的值检索索引identityNumber,请进行如下修改。

修改后的脚本:

var searchResult = columnValues.findIndex(identityNumber);
var searchResult = columnValues.findIndex(([r]) => r == identityNumber);
  • 在你的脚本中,似乎已检索到搜索行的列“ B”。

笔记:

  • 根据你的情况,当使用TextFinder,还可以按以下方式修改脚本。

    •   var columnValues = SS.getRange(2, column, SS.getLastRow()).getValues(); //1st is header row
        var searchResult = columnValues.findIndex(identityNumber); //Row Index - 2
        var rowID = searchResult + 2;
      
        var houseAddress = SS.getRange(rowID, 2).getValue();
      
    •   var houseAddress = SS.getRange(2, column, SS.getLastRow()).createTextFinder(identityNumber).findNext().offset(0, 1).getValue();
      

参考: