Можете ли вы добавить метку в массив .forEach в Google Script? - PullRequest
0 голосов
/ 15 сентября 2018

Я хочу перебрать все элементы в массиве, используя array.forEach(, и прервать или продолжить итерации, основанные на значении элемента.Тем не менее, компилятор Google Scripts говорит, что мне нужно иметь метку на каждом break или continue.Можно ли это сделать в следующем разделе?

for( i in traces ){
  environment = null;
  traces[i].servers.forEach( function(server){
    if( server.environment=="DEVELOPMENT" )
      environment = "DEVELOPMENT";
      break;  // got the earliest environment so no reason to keep on looking
    }
    if( server.environment=="QA" )
      environment = "QA";
      continue; // might get DEVELOPMENT next time
    }
    if( server.environment=="PRODUCTION" )
      environment = "PRODUCTION";
      continue; // might get DEVELOPMENT or QA next time
    }        
  });
  . . .
}

В качестве альтернативы, как я могу сделать все это лучше?

1 Ответ

0 голосов
/ 15 сентября 2018

Например, как насчет этого обходного пути? В этом обходном пути он использует some() вместо forEach(). Нет способа остановить цикл на forEach(), как упоминалось @ Cooper . В случае some() существует метод остановки цикла.

Очки модификации:

  • Если для этой ситуации используется some(), цикл можно остановить, вернув true.
    • Если строковые значения для поиска не найдены, res возвращает false.
    • Когда найдено одно из строковых значений для поиска, res возвращает true.

Модифицированный скрипт:

for( i in traces) {
  environment = null;
  var res = traces[i].servers.some(function(server) {
    switch (server.environment) {
      case "DEVELOPMENT":
        environment = "DEVELOPMENT";
        return true;
      case "QA":
        environment = "QA";
        break;
      case "PRODUCTION":
        environment = "PRODUCTION";
        break;
    }
  });

// do something

}

Примечание:

  • В этом измененном сценарии, когда найден DEVELOPMENT, цикл останавливается и res равен true.
  • Даже когда найдены QA и PRODUCTION, цикл не останавливается и цикл продолжается. Например, если DEVELOPMENT не найдено, а QA найдено, environment и res равны QA и false соответственно.
    • Из вашего сценария я подумал, что вам может понадобиться такой поток.
  • Я использовал switch вместо if для этой модификации, потому что она немного быстрее, чем if. Результат, который измерил это, составляет здесь . От вашего вопроса я подумал, что вам может понадобиться сценарий с низкой стоимостью. Поэтому я использовал switch.

Справка:

Если я неправильно понимаю, что вы хотите, извините.

...