Для каждого цикла в скрипте google apps

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

Ответ 1

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

Ответ 2

Из 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. 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() создает новый массив с результатами вызова предоставленной функции для каждого элемента в вызывающем массиве.