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

时间:2017-10-11 16:40:59

标签: javascript google-apps-script

我正在使用Google Apps脚本编写简单的电子邮件机器人处理程序。
说有一系列的东西。 我想使用for-each循环迭代数组。
(这很繁琐,每次迭代数组时写for(var i=0;i<threads.length;i++)。) 我正在寻找谷歌应用程序脚本的for-each循环。
我已经看过this回答了,但是对象是未定义的,大概是因为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循环。)

3 个答案:

答案 0 :(得分:29)

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

答案 1 :(得分:15)

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

V8 Syntax

// 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);
}

答案 2 :(得分:3)

From MDNThe 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()方法创建一个新数组,其结果是在调用数组中的每个元素上调用一个提供的函数。