640 Stimmen

Was ist der beste Weg, um aus verschachtelten Schleifen in JavaScript zu brechen?

Was ist der beste Weg, um aus verschachtelten Schleifen in Javascript zu brechen?

//Write the links to the page.
for (var x = 0; x < Args.length; x++)
{
   for (var Heading in Navigation.Headings)
   {
      for (var Item in Navigation.Headings[Heading])
      {
         if (Args[x] == Navigation.Headings[Heading][Item].Name)
         {
            document.write("<a href=\"" 
               + Navigation.Headings[Heading][Item].URL + "\">" 
               + Navigation.Headings[Heading][Item].Name + "</a> : ");
            break; // <---HERE, I need to break out of two loops.
         }
      }
   }
}

0 Stimmen

Hier ist ein gutes Beispiel für den Ausbruch aus Schleifen und Codeblöcken: marcin-chwedczuk.github.io/

2voto

user889030 Punkte 3543

Wie wäre es, die Schleifen bis an ihre Grenzen zu bringen?

    for(var a=0; a<data_a.length; a++){
       for(var b=0; b<data_b.length; b++){
           for(var c=0; c<data_c.length; c++){
              for(var d=0; d<data_d.length; d++){
                 a =  data_a.length;
                 b =  data_b.length;
                 c =  data_b.length;
                 d =  data_d.length;
            }
         }
       }
     }

1 Stimmen

Creo que Drakes Antwort hat die gleiche Logik in einer prägnanteren und klareren Form.

0 Stimmen

Absolut genial!

2voto

Matt Borja Punkte 1451

Bereits zuvor erwähnt von swilliams , aber mit einem Beispiel unten (Javascript):

// Function wrapping inner for loop
function CriteriaMatch(record, criteria) {
  for (var k in criteria) {
    if (!(k in record))
      return false;

    if (record[k] != criteria[k])
      return false;
  }

  return true;
}

// Outer for loop implementing continue if inner for loop returns false
var result = [];

for (var i = 0; i < _table.length; i++) {
  var r = _table[i];

  if (!CriteriaMatch(r[i], criteria))
    continue;

  result.add(r);
}

2voto

Tom Chen Punkte 157

Es gibt viele ausgezeichnete Lösungen. IMO, wenn Ihre Pause Bedingungen sind Ausnahmen, können Sie try-catch verwenden:

try{  
    for (var i in set1) {
        for (var j in set2) {
            for (var k in set3) {
                throw error;
            }
        }
    }
}catch (error) {

}

1voto

Azutanguy Punkte 121

Hmmm, hallo zur 10-Jahres-Party?

Warum sollten Sie nicht eine Bedingung in Ihr "für" aufnehmen?

var condition = true
for (var i = 0 ; i < Args.length && condition ; i++) {
    for (var j = 0 ; j < Args[i].length && condition ; j++) {
        if (Args[i].obj[j] == "[condition]") {
            condition = false
        }
    }
}

So halten Sie an, wann Sie wollen

In meinem Fall können wir mithilfe von Typescript some() verwenden, die das Array durchlaufen und anhalten, wenn die Bedingung erfüllt ist So wird mein Code wie folgt:

Args.some((listObj) => {
    return listObj.some((obj) => {
        return !(obj == "[condition]")
    })
})

So wird die Schleife sofort angehalten, wenn die Bedingung erfüllt ist

Zur Erinnerung: Dieser Code läuft in TypeScript

1voto

Pratik Khadtale Punkte 87

Weisen Sie die Werte zu, die sich in der Vergleichsbedingung befinden

function test(){
    for(var i=0;i<10;i++)
    {
            for(var j=0;j<10;j++)
            {
                    if(somecondition)
                    {
                            //code to Break out of both loops here
                            i=10;
                            j=10;
                    }

            }
    }

    //Continue from here

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X