Какой лучший способ избавиться от вложенных циклов в JavaScript?

380
задан Solomon Ucko 19 May 2019 в 21:06
поделиться

5 ответов

Точно так же, как Perl,

loop1:
    for (var i in set1) {
loop2:
        for (var j in set2) {
loop3:
            for (var k in set3) {
                break loop2;  // breaks out of loop3 and loop2
            }
        }
    }

, как определено в разделе EMCA-262 12.12. [Документы MDN]

В отличие от C, эти маркировки могут только использоваться для continue и break , поскольку JavaScript не имеет goto.

904
ответ дан Pavel 20 May 2019 в 07:06
поделиться
  • 1
    Как я делаю это? В моем Меню "Пуск" существует только одна Командная строка Visual Studio. Который является тем, что я уже использую. – bastibe 31 March 2010 в 06:52

Оберните это в функции и затем всего return.

149
ответ дан CloudyMarble 20 May 2019 в 07:06
поделиться
var str = "";
for (var x = 0; x < 3; x++) {
    (function() {  // here's an anonymous function
        for (var y = 0; y < 3; y++) {
            for (var z = 0; z < 3; z++) {
                // you have access to 'x' because of closures
                str += "x=" + x + "  y=" + y + "  z=" + z + "<br />";
                if (x == z && z == 2) {
                    return;
                }
            }
        }
    })();  // here, you execute your anonymous function
}

, Как это? :)

39
ответ дан harley.333 20 May 2019 в 07:06
поделиться
  • 1
    Я can' t делают его работой. Какой I' ve устанавливают на этой странице: При использовании " GDB" Используйте " Pipe" для стандартного ввода/вывода, " Checked" Отладьте исполняемый файл удаленно через SSH, Подключение к: " root@mycomputername.local" " Unchecked" Запустите исполняемый файл после стартового отладчика. И когда I' m выполнение моего приложения это показывает диалоговое окно с аутентификацией SSH, но ввод моего пароля как пароль дает " Аутентификация failed". я также пытался использовать свое имя пользователя, но это doesn' t работают также. И, btw, приложение doesn' t запускаются вообще. Что я делаю неправильно? – Anton 21 November 2009 в 22:07

Я немного опаздываю стороне, но следующее является агностическим языком подходом, который не использует GOTO/labels или функциональное обертывание:

for (var x = Set1.length; x > 0; x--)
{
   for (var y = Set2.length; y > 0; y--)
   {
      for (var z = Set3.length; z > 0; z--)
      {
          z = y = -1; // terminates second loop
          // z = y = x = -1; // terminate first loop
      }
   }
}

На позитивном аспекте это течет естественно, который должен понравиться толпе non-GOTO. На оборотной стороне внутренний цикл должен завершить текущее повторение прежде, чем завершиться так, это не могло бы быть применимо в некоторых сценариях.

82
ответ дан 22 November 2019 в 23:43
поделиться

quite simple

var a=[1,2,3];
var b=[4,5,6];
var breakCheck1=false;

for (var i in a){
    for (var j in b){
        breakCheck1=true;
        break;
    }
    if (breakCheck1) {break;}
}
36
ответ дан 22 November 2019 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: