簡體   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