2017-10-11 17 views
1

我正在使用Google Apps腳本編寫一個簡單的電子郵件bot處理程序。
說有一些東西。
我想使用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循環。)

+0

究竟什麼是您的問題? – tommyO

+0

(var線程的線程){ var msgs = thread.getMessages(); // msgs是一個GmailMessage [] for(var msg in msgs){ ... } } –

+0

for ...在迭代對象的鍵而不是它的值。 JS中不鼓勵這種模式,因爲它將包括添加到數組的定製原型。如果你想要一個更優雅的解決方案,我建議'thread.map(handleThread)'或者這些行上的東西 –

回答

2

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()方法創建一個新數組,其結果是對調用數組中的每個元素調用一個提供的函數。

4
 
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