web-dev-qa-db-fra.com

Boucle For-each dans le script google apps

J'écris un outil simple de gestion de bot par e-mail à l'aide de Google Apps Script.
Dis qu'il y a un tableau de quelque chose.
Je veux parcourir le tableau en utilisant une boucle for-each.
(C'est fastidieux d'écrire for(var i=0;i<threads.length;i++) à chaque fois que je parcours un tableau.)
Je cherche une boucle pour chaque script pour le script Google Apps.
J'ai déjà vu this répondre, mais l'objet n'est pas défini, probablement parce que la boucle for ne fonctionne pas.

// 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.
  }
}


(Je suis encore novice en javascript, mais je connais une boucle for-each de Java.)

13
phlaxyr
 Dans Google Apps Script: 
 Lors de l'utilisation de "for (var item dans itemArray)", 
 "Item" correspond aux indices de itemArray tout au long de la boucle (0, 1, 2 , 3, ...). 
 
 Lors de l'utilisation de "pour chaque (élément var dans itemArray)", 
 "Item" correspond aux valeurs de itemArray tout au long de la boucle (' item0 ', 
' item1 ',' item2 ',' item3 ', ...). 

Exemple:

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

Résultat:

 
 [17-10-16 23: 34: 47: 724 EDT] Impression des informations sur un tableau à l'aide de la boucle for. 
 [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] Impression des informations sur le tableau en utilisant pour chaque boucle. 
 [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] pamplemousse 
 
33
Branden Huggins

De MDN , The for...in statement iterates over the enumerable properties of an object, in original insertion order. For each distinct property, statements can be executed. Donc, vous ne voulez pas de for...in déclaration. Vous pouvez utiliser forEach () , qui exécute une fonction fournie une fois pour chaque élément de tableau, bien que vous n'ayez pas de fonction dans votre question, alors peut-être que ce n'est pas ce que vous voulez. map () est une autre option, mais elle nécessite également une fonction. La méthode map () crée un nouveau tableau avec les résultats de l'appel d'une fonction fournie sur chaque élément du tableau appelant.

3
Jason Fry