繁体   English   中英

谷歌应用程序脚本中的每个循环

[英]For-each loop in google apps script

您如何在 Google Apps Script 中创建 for-each 循环?

我正在用 GAS 编写电子邮件脚本,我想使用 for-each 循环而不是常规的 for 循环遍历数组。
我已经看过这个答案,但对象未定义,大概是因为 for 循环不起作用。

// threads is a GmailThread[]
for (var thread in threads) {
  var msgs = thread.getMessages();
  //msgs is a GmailMessage[]
  for (var msg in msgs) {
    msg.somemethod(); //somemethod is undefined, because msg is undefined.
  }
}


(我还是 javascript 的新手,但我知道 java 中有一个 for-each 循环。)

更新:有关将脚本迁移到 V8 运行时的更新,请参阅https://stackoverflow.com/a/60785941/5648223下面的 @BBau 答案。

In Google Apps Script:
When using "for (var item in itemArray)",
'item' will be the indices of itemArray throughout the loop (0, 1, 2, 3, ...).

When using "for each (var item in itemArray)",
'item' will be the values of itemArray throughout the loop ('item0', 
'item1', 'item2', 'item3', ...).

示例:

function myFunction() {
  var arrayInfo = [];
  
  arrayInfo.push('apple');
  arrayInfo.push('orange');
  arrayInfo.push('grapefruit');
  
  Logger.log('Printing array info using for loop.');
  for (var index in arrayInfo)
  {
    Logger.log(index);
  }
  Logger.log('Printing array info using for each loop.');
  for each (var info in arrayInfo)
  {
    Logger.log(info);
  }
}

结果:

[17-10-16 23:34:47:724 EDT] Printing array info using for loop.
    [17-10-16 23:34:47:725 EDT] 0
    [17-10-16 23:34:47:725 EDT] 1
    [17-10-16 23:34:47:726 EDT] 2
    [17-10-16 23:34:47:726 EDT] Printing array info using for each loop.
    [17-10-16 23:34:47:727 EDT] apple
    [17-10-16 23:34:47:728 EDT] orange
    [17-10-16 23:34:47:728 EDT] grapefruit

在新的 V8 运行时中,Google 删除了for each循环。 V8 迁移

V8 语法

// V8 runtime
var obj = {a: 1, b: 2, c: 3};

for (var key in obj) {  // OK in V8
  var value = obj[key];
  Logger.log("value = %s", value);
}

旧语法已弃用

// Rhino runtime
var obj = {a: 1, b: 2, c: 3};

// Don't use 'for each' in V8
for each (var value in obj) {
  Logger.log("value = %s", value);
}

来自 MDNThe for...in statement iterates over the enumerable properties of an object, in original insertion order. For each distinct property, statements can be executed. The for...in statement iterates over the enumerable properties of an object, in original insertion order. For each distinct property, statements can be executed. 所以你不需要for...in语句。 您可以使用forEach() ,它为每个数组元素执行一次提供的函数,尽管您的问题中没有函数,所以这可能不是您想要的。 map()是另一种选择,但它也需要一个函数, map() 方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM