Google脚本/Javascript includes()函数与预期的有效输入不匹配

Google脚本/Javascript includes()函数与预期的有效输入不匹配,javascript,google-apps-script,Javascript,Google Apps Script,我正在努力弄清楚为什么我在这里使用的Javascript include()函数不匹配并返回true。该代码在Google工作表上的Google脚本中用于填充某些单元格值。以下是完整脚本中的相关代码: const currentYear = getCurrentYear(); //Get current year from active sheet name function getCurrentYear(){ year = sheetName.slice(-7, -2); retu

我正在努力弄清楚为什么我在这里使用的Javascript include()函数不匹配并返回
true
。该代码在Google工作表上的Google脚本中用于填充某些单元格值。以下是完整脚本中的相关代码:

const currentYear = getCurrentYear();

//Get current year from active sheet name
function getCurrentYear(){

  year = sheetName.slice(-7, -2);
  return year; //returns "2020"

}

//Return Current Control File ID
function getCurrentControlFileId(){
  
  const controlFolder = DriveApp.getFolderById(controlFolderId);
  const controlFiles = controlFolder.getFiles();
  
  while (controlFiles.hasNext()){
    let controlFile = controlFiles.next();
    let currentControlFileName = controlFile.getName(); // Evaluates to "CONTROL 2020"
    let searchString = `${currentYear}`; // Evaluates to "2020"
    //Have also tried:
    //let searchString = currentYear; 
    
    if (currentControlFileName.includes(searchString)){
      let controlFileId = controlFile.getId();
      return controlFileId;
    }
  }
  
}
controlFile.getName().includes(searchString)
返回
false
,即使
controlFile.getName()
值为“CONTROL 2020”,而
searchString
值为“2020”。两者都是字符串。如果我在
If
语句中手动输入“2020”,条件如下:

controlFile.getName().includes(“2020”)
它返回true并按预期工作,返回ID字符串。我还尝试在
String()
中包装
currentYear
controlFile.getName()
,但仍然返回false。我真的看不出这里有什么问题,希望能得到一些帮助。

很可能
year
包含一个空白 您可以使用
Logger.log(year.length)对其进行双重检查

请注意,当使用结束索引时,它是结果中未包含的第一个元素。因此,如果您预期输出为“2020”(对应于
年.length=4
):

end start
应等于
4

如果您的工作表名称类似于
“XXX 2020 YY”
,则应将
年份的定义修改为


year=sheetName.slice(-7,-3)

无法再现您描述的情况。你能测试一下吗:
Logger.log(searchString==“2020”)
?如果返回false,那么
searchString
@Marios中有一个问题,谢谢您的建议。在Stackdriver日志中,它返回为false。非常奇怪,因为searchString返回类似“2020”的内容,但不是这样解释的。有什么想法吗?你能查一下:
Logger.log(typeof searchString)
?还可以通过
Logger.log(searchString)
@Marios查看值是否为2020而不是“2020”。记录器说typeof是String,而值本身是“2020”(不带引号)。我添加了:“ui.alert(typeof currentControlFileName);警报(currentControlFileName);Logger.log(currentControlFileName的类型);Logger.log(currentControlFileName);'记录器显示它们都是字符串,searchString的值为“2020”,currentControlFileName的值为“CONTROL 2020”。这很有效,非常感谢,我花了几个小时试图解决这个问题,但我不明白为什么include()函数不起作用,因为“CONTROL 2020”确实包含“2020”(2020前面的空格)那么它应该匹配吗?或者我切割它的方式会导致2020之后出现一个空格,比如:“2020”,但不匹配吗?你的工作表名是什么?如果你将它切割为“2020”,那么它将不匹配。工作表名是“CONTROL 2020”,我正在搜索“2020”。sheetName.slice(-7,-2)似乎返回“2020”那么你是说它会在“2020”之前或之后引入一个空格?如果在“2020”之前,它应该仍然匹配。@对角化它肯定不是
control2020
“control2020”。slice(-7,-2)==“ol20”而不是2020。如果
2020
和表情符号之间有空格,那么使用
year=sheetName.split(“”[1];
还有一个原因。