it-swarm.dev

Per ogni ciclo nello script di Google Apps

Sto scrivendo un semplice gestore di bot per email utilizzando Google Apps Script.
Di 'che c'è una serie di qualcosa.
Voglio iterare l'array usando un ciclo for-each.
(È noioso, scrivere for(var i=0;i<threads.length;i++) ogni volta che si scorre in un array.)
Sto cercando un ciclo per ciascuno per lo script di app di Google.
Ho già visto this answer, ma l'oggetto non è definito, presumibilmente perché il ciclo for non funziona.

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


(Sono ancora nuovo in javascript, ma conosco un ciclo for-each di Java.)

13
phlaxyr
 In Google Apps Script: 
 Quando si utilizza "for (var item in itemArray)", 
 "Item" saranno gli indici di itemArray in tutto il ciclo (0, 1, 2 , 3, ...). 
 
 Quando si utilizza "per ciascuno (elemento var in itemArray)", 
 'Item' saranno i valori di itemArray in tutto il ciclo (' item0 ', 
' item1 ',' item2 ',' item3 ', ...). 

Esempio:

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

Risultato:

 
 [17-10-16 23: 34: 47: 724 EDT] Stampa delle informazioni sull'array usando per il ciclo. 
 [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] Stampa delle informazioni sull'array usando per ogni ciclo. 
 [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] pompelmo 
 
33
Branden Huggins

Da 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. Quindi non vuoi un for...in istruzione. È possibile utilizzare forEach () , che esegue una funzione fornita una volta per ciascun elemento dell'array, anche se non si dispone di una funzione nella domanda, quindi forse non è quello che si desidera. map () è un'altra opzione, ma ha anche bisogno di una funzione. Il metodo map () crea un nuovo array con i risultati della chiamata di una funzione fornita su ogni elemento dell'array chiamante.

3
Jason Fry