Google脚本/Javascript includes()函数与预期的有效输入不匹配
我正在努力弄清楚为什么我在这里使用的Javascript include()函数不匹配并返回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
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];
还有一个原因。