【发布时间】:2019-05-17 15:38:00
【问题描述】:
我有一个简单的 Google Apps 脚本代码,如下所示:
function throwsError(){
var inboxThreads = GmailApp.getInboxThreads();
var sliceArr = inboxThreads.slice(0, 3);
Logger.log(sliceArr.length);
for each (var thread in sliceArr){
Logger.log(inboxThreads.containsThread(thread));
}
}
function doesNotThrowError(){
var inboxThreads = GmailApp.getInboxThreads();
var sliceArr = inboxThreads.slice(0, 3);
Logger.log(sliceArr.length);
for (var i = 0; i < sliceArr.length; i++){
Logger.log(inboxThreads.containsThread(sliceArr[i]));
}
}
Array.prototype.containsThread = function(thread){
Logger.log("Here");
Logger.log(thread);
return this.filter(function(t){ return t.getId() == thread.getId(); }).length > 0;
}
正如函数名称所示,throwsError() 会引发 TypeError: Cannot find function getId in object function (thread) {...}. 错误。 doesNotThrowError() 运行完美,没有问题。它们之间的唯一区别是一个使用for 循环,而另一个使用for each 循环。
throwsError()的日志输出如下:
我的 sliceArr 数组中似乎只有 3 个项目,但 containsThread 被调用了 4 次。 (此外,它似乎第四次将containsThread 函数作为参数传递给自身)。有什么想法可能导致这种情况吗?
我的倾向是这是 Google Apps 脚本的一个错误,但我想在这里检查一下,以防其他人有一些见解。请注意,Google Apps 脚本 works on JS 1.6 with some portions of 1.7 and 1.8
【问题讨论】:
-
for each (var thread in easyThreads)无法为我编译。不应该是for (var thread in easyThreads)吗?或者这可能是 Google Apps 脚本所特有的...... -
@SteveO'Connor 我认为这是 Google Apps 脚本特有的
-
@SteveO'Connor 我只是将我的问题更改为具有最少的可重复步骤(基本上,没有“easyLabel”要求)
-
不要使用
for each in,句号。
标签: javascript arrays google-apps-script foreach