2017-10-11 14 views
1

Google Apps Scriptを使用して簡単な電子メールボットハンドラを作成しています。
何かの配列があるとします。
for-eachループを使用して配列を反復処理したいとします。
(アレイを繰り返し実行するたびにfor(var i=0;i<threads.length;i++)と書くのは面倒です)
私はgoogle appsスクリプトのfor-eachループを探しています。
私は既にthis答えを見ましたが、オブジェクトは未定義です。おそらくforループが機能しないからです。Google Appsスクリプトの各ループについて

// 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ループを知っている。)

+0

まさにあなたの問題は何ですか? – tommyO

+0

(varスレッドのスレッド){ var msgs = thread.getMessages(); // msgsはGmailメッセージです。 ... } } –

+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()を使用すると、それぞれの配列要素に対して提供された関数を1回実行しますが、あなたの質問には関数がないので、あなたが望むものではないかもしれません。 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 

関連する問題