it-swarm.com.ru

Для каждого цикла в скрипте приложений Google

Я пишу простой обработчик почтовых ботов, используя Google Apps Script.
Скажи, что есть множество чего-то.
Я хочу перебрать массив, используя цикл for-each.
(Это утомительно, писать for(var i=0;i<threads.length;i++) каждый раз, когда я перебираю массив.)
Я ищу цикл for-each для скрипта приложений Google.
Я уже видел 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.)

13
phlaxyr
 В Google Apps Script: 
 При использовании "for (var item в itemArray)", 
 'Item' будет индексом itemArray во всем цикле (0, 1, 2 , 3, ...). 
 
 При использовании "для каждого (переменная item в itemArray)", 
 'Item' будет значением itemArray во всем цикле (' 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] Печать информации о массиве с использованием цикла 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] Печать информации о массиве для каждой петли. 
 [17-10-16 23: 34: 47: 727 EDT] Apple 
 [ 17-10-16 23: 34: 47: 728 EDT] апельсиновый 
 [17-10-16 23: 34: 47: 728 EDT] грейпфрут 
 
33
Branden Huggins

из 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. Так что вы не хотите for...in заявление. Вы можете использовать forEach () , который выполняет предоставленную функцию один раз для каждого элемента массива, хотя у вас нет функции в вашем вопросе, так что, возможно, это не то, что вы хотите. map () - еще одна опция, но для нее также требуется функция. Метод map () создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.

3
Jason Fry