In Java können Sie eine for
Schleife verwenden, um Objekte in einem Array wie folgt zu durchlaufen:
String[] myStringArray = {"Hello", "World"};
for (String s : myStringArray)
{
// Do something
}
Können Sie dasselbe in JavaScript tun?
javascript
arrays
loops
for-loop
Mark Szymanski
quelle
quelle
for-in
Schleife zählt auf Objekteigenschaften, ohne eine bestimmte Reihenfolge, und es zählt auch vererbten Eigenschaften. .. für die Iteration über Arrays werden immer sequentielle Schleifen empfohlen ...in
undof
das kann sowohl verwendet werden als auch verschiedene Dinge tun. Dann haben Sie auchforEach
und die hässliche und nervige indexbasierte Schleife. Jede andere moderne Sprache macht das Durchlaufen einer Sammlung einfach und unkompliziert, ohne Überraschungen oder Verwirrung. JS könnte es auch, aber das tut es nicht.Antworten:
Sie haben mehrere Möglichkeiten:
1. Sequenzschleife
for
:Vorteile
break
undcontinue
steuernNachteile
2. Array.prototype.forEach
Die ES5-Spezifikation führte viele nützliche Array-Methoden ein, eine davon,
Array.prototype.forEach
und bietet uns eine präzise Möglichkeit, über ein Array zu iterieren:Vor fast zehn Jahren, als die ES5-Spezifikation veröffentlicht wurde (Dezember 2009), wurde sie von fast allen modernen Engines in Desktop-, Server- und Mobilumgebungen implementiert, sodass ihre Verwendung sicher ist.
Und mit der Syntax der ES6-Pfeilfunktion ist es noch prägnanter:
Pfeilfunktionen sind ebenfalls weit verbreitet, es sei denn, Sie möchten alte Plattformen (z. B. IE11) unterstützen. Sie sind auch sicher zu gehen.
Vorteile
Nachteile
break
/ nicht verwendencontinue
Normalerweise können Sie die Notwendigkeit ersetzen
break
, imperative Schleifen zu verlassen, indem Sie die Array-Elemente filtern, bevor Sie sie iterieren. Beispiel:Denken Sie daran, wenn Sie ein Array iterieren , um ein anderes Array daraus zu erstellen , sollten Sie es verwenden
map
. Ich habe dieses Anti-Pattern so oft gesehen.Anti-Muster:
Richtiger Anwendungsfall der Karte :
Wenn Sie versuchen, das Array auf einen Wert zu reduzieren , z. B. ein Array von Zahlen summieren möchten, sollten Sie die Reduktionsmethode verwenden.
Anti-Muster:
Richtige Verwendung von reduzieren :
3. ES6-
for-of
AnweisungDer ES6-Standard führt das Konzept iterierbarer Objekte ein und definiert ein neues Konstrukt zum Durchlaufen von Daten, die
for...of
Anweisung.Diese Anweisung funktioniert für jede Art von iterierbarem Objekt und auch für Generatoren (jedes Objekt, das eine
[Symbol.iterator]
Eigenschaft hat).Array-Objekte sind per Definition in ES6 integrierte Iterables, sodass Sie diese Anweisung für sie verwenden können:
Vorteile
break
/continue
) verwenden.Nachteile
Verwende nicht
for...in
@zipcodeman schlägt die Verwendung der
for...in
Aussage, aber Arrays zur Iterationfor-in
sollte vermieden werden, wird diese Aussage gemeint enumerate Objekteigenschaften.Es sollte nicht für Array-ähnliche Objekte verwendet werden, weil:
Der zweite Punkt ist, dass es Ihnen viele Probleme bereiten kann. Wenn Sie beispielsweise das
Array.prototype
Objekt um eine Methode erweitern, wird diese Eigenschaft ebenfalls aufgelistet.Zum Beispiel:
Der obige Code konsolidiert das Protokoll "a", "b", "c" und "foo!".
Dies ist insbesondere dann ein Problem, wenn Sie eine Bibliothek verwenden, die stark auf der Erweiterung nativer Prototypen basiert (z. B. MooTools).
Die
for-in
Erklärung , wie ich sagte , bevor es aufzuzählen Objekteigenschaften, zum Beispiel:Im obigen Beispiel
hasOwnProperty
können Sie mit der Methode nur eigene Eigenschaften auflisten, dh nur die Eigenschaften, über die das Objekt physisch verfügt, keine geerbten Eigenschaften.Ich würde Ihnen empfehlen, den folgenden Artikel zu lesen:
quelle
false
,undefined
,0
,""
,NaN
.Ja, vorausgesetzt, Ihre Implementierung enthält die in ECMAScript 2015 eingeführte Funktion
for
...of
(die "Harmony" -Version) ..., was heutzutage eine ziemlich sichere Annahme ist.Es funktioniert so:
Oder noch besser, da ECMAScript 2015 auch Variablen mit Blockbereich bietet:
(Die Variable
s
ist bei jeder Iteration unterschiedlich, kann jedochconst
innerhalb des Schleifenkörpers deklariert werden, solange sie dort nicht geändert wird.)Ein Hinweis zu spärlichen Arrays: Ein Array in JavaScript speichert möglicherweise nicht so viele Elemente, wie von seinem gemeldet werden
length
. Diese gemeldete Zahl ist einfach eins größer als der höchste Index, bei dem ein Wert gespeichert wird. Wenn das Array weniger Elemente enthält als durch seine Länge angegeben, wird es als spärlich bezeichnet . Zum Beispiel ist es absolut legitim, ein Array mit Elementen nur in den Indizes 3, 12 und 247 zu haben. das s für fehlende Elemente, oder möchten Sie nur die tatsächlich vorhandenen Elemente verarbeiten? Es gibt viele Anwendungen für beide Ansätze; Es hängt nur davon ab, wofür Sie das Array verwenden.length
eines solchen Arrays wird als 248 gemeldet, obwohl es tatsächlich nur 3 Werte speichert. Wenn Sie versuchen, auf ein Element in einem anderen Index zuzugreifen, scheint das Array dort denundefined
Wert zu haben. Wenn Sie also ein Array "durchlaufen" möchten, müssen Sie eine Frage beantworten: Möchten Sie den gesamten Bereich durchlaufen, der durch seine Länge und seinen Prozess angezeigt wird?undefined
Wenn Sie ein Array mit
for
.. durchlaufenof
, wird der Hauptteil der Schleifelength
mal ausgeführt , und die Regelungsvariableundefined
für alle Elemente, die nicht im Array vorhanden sind, wird auf gesetzt. Abhängig von den Details Ihres Codes "Mach etwas mit" kann dieses Verhalten das sein, was Sie wollen, aber wenn nicht, sollten Sie einen anderen Ansatz verwenden.Natürlich haben einige Entwickler keine andere Wahl, einen anderen Ansatz zu verwenden , wie auch immer, weil aus irgendeinem Grund sie eine Version von JavaScript Targeting sind , die noch nicht unterstützt
for
...of
.Solange Ihre JavaScript-Implementierung mit der vorherigen Ausgabe der ECMAScript-Spezifikation kompatibel ist (die beispielsweise Versionen von Internet Explorer vor 9 ausschließt), können Sie die
Array#forEach
Iteratormethode anstelle einer Schleife verwenden. In diesem Fall übergeben Sie eine Funktion, die für jedes Element im Array aufgerufen werden soll:Im Gegensatz zu
for
...of
wird.forEach
die Funktion nur für Elemente aufgerufen, die tatsächlich im Array vorhanden sind. Wenn unser hypothetisches Array mit drei Elementen und einer Länge von 248 übergeben wird, wird die Funktion nur dreimal aufgerufen, nicht 248 Mal. Es wird auch zwischen fehlenden Elementen und Elementen unterschieden, die tatsächlich eingestellt sindundefined
. Für letzteres wird die Funktion weiterhin aufgerufen undundefined
als Argument übergeben. Wenn Sie auf diese Weise mit spärlichen Arrays umgehen möchten, ist dies.forEach
möglicherweise der richtige Weg, auch wenn Ihr Interpreterfor
... unterstütztof
.Die letzte Option, die in allen Versionen von JavaScript funktioniert , ist eine explizite Zählschleife . Sie zählen einfach von 0 bis eins weniger als die Länge und verwenden den Zähler als Index. Die Grundschleife sieht folgendermaßen aus:
Ein Vorteil dieses Ansatzes besteht darin, dass Sie auswählen können, wie mit spärlichen Arrays umgegangen werden soll. Der obige Code wird den Körper der Schleife der vollen läuft
length
mal mits
Satzundefined
für alle fehlenden Elemente, wiefor
..of
. Wenn Sie stattdessen nur die tatsächlich vorhandenen Elemente eines spärlichen Arrays behandeln möchten.forEach
, können Siein
dem Index einen einfachen Test hinzufügen :Das Zuweisen des Längenwerts zur lokalen Variablen (im Gegensatz zum Einfügen des vollständigen
myStringArray.length
Ausdrucks in die Schleifenbedingung) kann einen erheblichen Leistungsunterschied bewirken, da jedes Mal eine Eigenschaftssuche übersprungen wird. Wenn ich Rhino auf meinem Computer verwende, beträgt die Beschleunigung 43%.Möglicherweise sehen Sie das Längen-Caching in der Schleifeninitialisierungsklausel wie folgt:
Die explizite Zählschleife bedeutet auch, dass Sie auf den Index jedes Werts zugreifen können, falls Sie dies wünschen. Der Index wird auch als zusätzlicher Parameter an die Funktion übergeben
forEach
, an die Sie übergeben , sodass Sie auch auf diese Weise darauf zugreifen können:for
...of
gibt Ihnen nicht den Index an, der jedem Objekt zugeordnet ist, aber solange das Objekt, über das Sie iterieren, tatsächlich ein Objekt istArray
(for
..of
funktioniert für andere iterierbare Typen, die diese Methode möglicherweise nicht haben), können Sie das Array verwenden #entries- Methode, um sie in ein Array von [index, item] -Paaren zu ändern und dann darüber zu iterieren:Das
for
in
von anderen erwähnte ... -Syntax dient zum Durchlaufen der Eigenschaften eines Objekts. Da ein Array in JavaScript nur ein Objekt mit numerischen Eigenschaftsnamen (und einer automatisch aktualisiertenlength
Eigenschaft) ist, können Sie theoretisch ein Array damit durchlaufen. Das Problem ist jedoch, dass es sich nicht auf die numerischen Eigenschaftswerte beschränkt (denken Sie daran, dass selbst Methoden eigentlich nur Eigenschaften sind, deren Wert ein Abschluss ist), und es wird auch nicht garantiert, dass es über diese in numerischer Reihenfolge iteriert. Daher sollte diefor
...in
-Syntax nicht zum Durchlaufen von Arrays verwendet werden.quelle
i in myStringArray
in Ihrem Beispiel verwendet haben? Wie kann das falsch sein?a=[1,2,3,4]; delete a[2]; for (j in a) { console.log(j); }
Ausgänge 0, 1, 3 und 4.a.length
ist immer noch 5.for j in a
. Ich demonstriere, dass diein
Prüfung nicht redundant ist, wie Sie behauptet haben, indem ich alle Indizes zeige und zeige, dass es einen zwischen 0 gibt undlength-1
dieser nicht da ist. Ich hätte auch einfach drucken können2 in a
, was in der Tat der Fall istfalse
, obwohl Sie sagten, dass dies unmöglich sei.Sie können
map
eine funktionale Programmiertechnik verwenden, die auch in anderen Sprachen wie Python und Haskell verfügbar ist .Die allgemeine Syntax lautet:
Im Allgemeinen
func
würde ein Parameter verwendet, der ein Element des Arrays ist. Im Fall von JavaScript kann jedoch ein zweiter Parameter, der der Index des Elements ist, und ein dritter Parameter, der das Array selbst ist, verwendet werden.Der Rückgabewert von
array.map
ist ein anderes Array, sodass Sie es folgendermaßen verwenden können:Und jetzt ist x
[10,20,30,40]
.Sie müssen die Funktion nicht inline schreiben. Es könnte eine separate Funktion sein.
das wäre eine Art Äquivalent zu:
Außer du verstehst das nicht
new_list
.quelle
Array.forEach
.map
dient zum Generieren eines neuen Arrays.Array.prototype.map
Methode ist Teil des ECMAScript 5th Edition Standard, ist noch nicht in allen Implementierungen verfügbar (z. B. IE fehlt), auch zum Iterieren über ein Array. Ich denke, dieArray.prototype.forEach
Methode ist semantisch korrekter. Ich schlage die For-In-Erklärung vor, siehe meine Antwort für weitere Details :)forEach
undmap
besteht darin, dass Ersteres die Ergebnisse der Iteration nicht zurückgibt.map
(manchmal auch bekanntcollect
, aber sehr verschieden vonapply
) dient ausdrücklich dazu, jedes Element eines Arrays in ein entsprechendes Ergebnis umzuwandeln. Es ist eine 1-zu-1- Zuordnung , daher der Name. Es ist Teil einer ganzen Familie von Operationen,reduce
die Folgendes umfassen (was ein einzelnes Ergebnis aus dem gesamten Array erzeugt) undfilter
(was eine Teilmenge des ursprünglichen Arrays erzeugt) und so weiter. WährendforEach
mit jedem Element nur etwas zu tun ist, ist die Semantik nicht spezifiziert.In JavaScript ist es nicht ratsam, ein Array mit einer For-In-Schleife zu durchlaufen, aber es ist besser, eine
for
Schleife zu verwenden , z.Es ist ebenfalls optimiert ("Caching" der Array-Länge). Wenn Sie mehr erfahren möchten, lesen Sie meinen Beitrag zu diesem Thema .
quelle
++i
anstelle voni++
++i
ist eine Old-School-Optimierung, die moderne Compiler seit langer Zeit in einer for-Schleife für Sie durchführen :) stackoverflow.com/a/1547433/1033348i_stop
oderi_end
stattdessenlen
. Es ist genauso lesbar (wenn nicht mehr!), Und Sie werden diese Art von Problem natürlich vermeiden (da Ihre andere Schleife zj_stop
. B. wird ).für (lass uns von myStringArray) {
(Beantworten Sie Ihre Frage direkt: Jetzt können Sie!)
Die meisten anderen Antworten sind richtig, aber sie erwähnen (zum Zeitpunkt
dieses Schreibens) nicht, dass ECMA Script62015 einen neuen Mechanismus für die Iteration bringt, diefor..of
Schleife.Diese neue Syntax ist die eleganteste Methode, um ein Array in Javascript zu iterieren (solange Sie den Iterationsindex nicht benötigen).
Es funktioniert derzeit mit Firefox 13+, Chrome 37+ und nicht nativ mit anderen Browsern (siehe Browserkompatibilität unten). Glücklicherweise haben wir JS-Compiler (wie Babel ), mit denen wir heute Funktionen der nächsten Generation verwenden können.
Es funktioniert auch auf Node (ich habe es auf Version 0.12.0 getestet).
Iterieren eines Arrays
Iterieren einer Reihe von Objekten
Iterieren eines Generators:
(Beispiel aus https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of )
Kompatibilitätstabelle: http://kangax.github.io/es5-compat-table/es6/#For..of Schleifen
Spezifikation: http://wiki.ecmascript.org/doku.php?id=harmony:iterators
}}
quelle
const s
anstelle vonvar s
var s of arr
ist die Ausführungszeit fast doppelt so hoch (1,9x) wie die Verwendung eines einfachen Zählers für die Schleife und das Abrufen von Elementen nach Index in nodejsOpera, Safari, Firefox und Chrome verwenden jetzt eine Reihe erweiterter Array-Methoden zur Optimierung vieler gängiger Schleifen.
Möglicherweise benötigen Sie nicht alle, aber sie können sehr nützlich sein, oder wenn jeder Browser sie unterstützt.
Mozilla Labs hat die von ihnen und WebKit verwendeten Algorithmen veröffentlicht , sodass Sie sie selbst hinzufügen können.
Der Filter gibt ein Array von Elementen zurück, die eine Bedingung oder einen Test erfüllen.
Jedes gibt true zurück, wenn jedes Array-Mitglied den Test besteht.
Einige geben true zurück, wenn jemand den Test besteht.
forEach führt für jedes Array-Mitglied eine Funktion aus und gibt nichts zurück.
map ist wie forEach, gibt jedoch für jedes Element ein Array der Ergebnisse der Operation zurück.
Diese Methoden verwenden alle eine Funktion für ihr erstes Argument und haben ein optionales zweites Argument. Dies ist ein Objekt, dessen Bereich Sie den Array-Mitgliedern beim Durchlaufen der Funktion auferlegen möchten.
Ignoriere es, bis du es brauchst.
indexOf und lastIndexOf finden die entsprechende Position des ersten oder letzten Elements, die genau zu seinem Argument passt.
quelle
Intro
Seit meiner Zeit am College habe ich in Java, JavaScript, Pascal, ABAP programmiert , PHP, Progress 4GL, C / C ++ und möglicherweise einigen anderen Sprachen programmiert, an die ich momentan nicht denken kann.
Während sie alle ihre eigenen sprachlichen Eigenheiten haben, teilt jede dieser Sprachen viele der gleichen Grundkonzepte. Solche Konzepte umfassen Prozeduren / Funktionen,
IF
Anweisungen,FOR
Schleifen undWHILE
Schleifen.Eine traditionelle
for
SchleifeEine herkömmliche
for
Schleife besteht aus drei Komponenten:Diese drei Komponenten sind durch ein
;
Symbol voneinander getrennt . Der Inhalt für jede dieser drei Komponenten ist optional. Dies bedeutet, dass die folgendefor
Schleife so gering wie möglich ist:Natürlich müssen Sie ein
if(condition === true) { break; }
oderif(condition === true) { return; }
irgendwo in diesefor
Schleife einfügen, damit sie nicht mehr läuft.Normalerweise wird die Initialisierung jedoch verwendet, um einen Index zu deklarieren, die Bedingung wird verwendet, um diesen Index mit einem minimalen oder maximalen Wert zu vergleichen, und der nachträgliche Gedanke wird verwendet, um den Index zu erhöhen:
Verwenden einer herkömmlichen
for
Schleife zum Durchlaufen eines ArraysDie traditionelle Art, ein Array zu durchlaufen, ist folgende:
Wenn Sie es vorziehen, rückwärts zu schleifen, tun Sie Folgendes:
Es sind jedoch viele Variationen möglich, wie zum Beispiel diese:
...oder dieses...
...oder dieses:
Was am besten funktioniert, hängt hauptsächlich vom persönlichen Geschmack und dem spezifischen Anwendungsfall ab, den Sie implementieren.
Beachten Sie, dass jede dieser Varianten von allen Browsern unterstützt wird, auch von sehr sehr alten!
Eine
while
SchleifeEine Alternative zu einer
for
Schleife ist einewhile
Schleife. Um ein Array zu durchlaufen, können Sie Folgendes tun:Wie herkömmliche
for
Schleifen werdenwhile
Schleifen auch von den ältesten Browsern unterstützt.Beachten Sie außerdem, dass jede while-Schleife als
for
Schleife umgeschrieben werden kann . Zum Beispielwhile
verhält sich die Schleife oben genauso wie diesefor
Schleife:For...in
undfor...of
In JavaScript können Sie dies auch tun:
Dies sollte jedoch mit Vorsicht angewendet werden, da es sich nicht
for
in allen Fällen wie eine herkömmliche Schleife verhält und potenzielle Nebenwirkungen berücksichtigt werden müssen. Siehe Warum ist die Verwendung von "for ... in" mit Array-Iteration eine schlechte Idee?für mehr Details.Als Alternative dazu
for...in
gibt es jetzt auch fürfor...of
. Das folgende Beispiel zeigt den Unterschied zwischen einerfor...of
Schleife und einerfor...in
Schleife:Darüber hinaus müssen Sie berücksichtigen, dass keine Version von Internet Explorer unterstützt
for...of
( Edge 12+ ) und dassfor...in
mindestens Internet Explorer 10 erforderlich ist.Array.prototype.forEach()
Eine Alternative zu
for
-loops istArray.prototype.forEach()
die folgende Syntax:Array.prototype.forEach()
wird von allen modernen Browsern sowie von Internet Explorer 9 und höher unterstützt.Bibliotheken
Schließlich haben viele Dienstprogrammbibliotheken auch ihre eigene
foreach
Variante. AFAIK, die drei beliebtesten sind:jQuery.each()
, in jQuery :_.each()
, in Underscore.js :_.forEach()
, in Lodash.js :quelle
Verwenden Sie die while-Schleife ...
Protokolle: 'eins', 'zwei', 'drei'
Und für die umgekehrte Reihenfolge eine noch effizientere Schleife
Protokolle: 'drei', 'zwei', 'eins'
Oder die klassische
for
SchleifeProtokolle: 'eins', 'zwei', 'drei'
Referenz: http://www.sitepoint.com/google-closure-how-not-to-write-javascript/
quelle
Wenn Sie eine knappe Methode zum Schreiben einer schnellen Schleife wünschen und umgekehrt iterieren können:
Dies hat den Vorteil, dass die Länge zwischengespeichert wird (ähnlich
for (var i=0, len=myArray.length; i<len; ++i)
und nicht ähnlichfor (var i=0; i<myArray.length; ++i)
), während weniger Zeichen eingegeben werden müssen.Es gibt sogar Zeiten, in denen Sie in umgekehrter Reihenfolge iterieren sollten, z. B. wenn Sie über eine Live-NodeList iterieren, in der Sie während der Iteration Elemente aus dem DOM entfernen möchten .
quelle
for (var i=0,len=array.length;i<len;++i)
war eine übliche, sinnvolle Schleife zu schreiben.Einige Anwendungsfälle für das Durchlaufen eines Arrays in der funktionalen Programmierweise in JavaScript:
1. Durchlaufen Sie einfach ein Array
Hinweis: Array.prototype.forEach () ist streng genommen keine funktionale Methode, da die Funktion, die als Eingabeparameter verwendet wird, keinen Wert zurückgeben soll, der daher nicht als reine Funktion angesehen werden kann.
2. Überprüfen Sie, ob eines der Elemente in einem Array einen Test besteht
3. In ein neues Array transformieren
Hinweis: Die map () -Methode erstellt ein neues Array mit den Ergebnissen des Aufrufs einer bereitgestellten Funktion für jedes Element im aufrufenden Array.
4. Fassen Sie eine bestimmte Eigenschaft zusammen und berechnen Sie ihren Durchschnitt
5. Erstellen Sie ein neues Array basierend auf dem Original, ohne es jedoch zu ändern
6. Zählen Sie die Nummer jeder Kategorie
7. Rufen Sie eine Teilmenge eines Arrays basierend auf bestimmten Kriterien ab
Hinweis: Die filter () -Methode erstellt ein neues Array mit allen Elementen, die den von der bereitgestellten Funktion implementierten Test bestehen.
8. Sortieren Sie ein Array
9. Suchen Sie ein Element in einem Array
Die Methode Array.prototype.find () gibt den Wert des ersten Elements im Array zurück, das die bereitgestellte Testfunktion erfüllt.
Verweise
quelle
Es gibt eine Möglichkeit, dies zu tun, wenn Sie nur sehr wenig impliziten Bereich in Ihrer Schleife haben und zusätzliche Variablen entfernen.
Oder wenn Sie wirklich die ID erhalten und eine wirklich klassische
for
Schleife haben möchten :Moderner Browser all Unterstützung Iteratormethoden
forEach
,map
,reduce
,filter
und eine Vielzahl von anderen Methoden auf dem Array - Prototyp .quelle
Es gibt verschiedene Möglichkeiten, ein Array in JavaScript zu durchlaufen.
Generische Schleife:
ES5 für jeden:
jQuery.each:
Schauen Sie sich dies an, um detaillierte Informationen zu erhalten, oder überprüfen Sie MDN auf Schleifen durch ein Array in JavaScript und verwenden Sie jQuery. Überprüfen Sie jQuery für jedes Array .
quelle
Ich würde empfehlen, die Bibliothek underscore.js zu verwenden. Es bietet Ihnen verschiedene Funktionen, mit denen Sie Arrays / Sammlungen durchlaufen können.
Zum Beispiel:
quelle
underscore
wenn ECMA-262 dasforEach
Methor hinzugefügt wurde . Der native Code ist immer besser.Array-Schleife:
Objektschleife:
quelle
Ja , Sie können dasselbe in JavaScript mithilfe einer Schleife tun, aber nicht darauf beschränkt . Es gibt viele Möglichkeiten, eine Schleife über Arrays in JavaScript durchzuführen. Stellen Sie sich vor, Sie haben dieses Array unten und möchten eine Schleife darüber erstellen:
Dies sind die Lösungen:
1) Für Schleife
Eine
for
Schleife ist eine übliche Methode zum Durchlaufen von Arrays in JavaScript, wird jedoch nicht als die schnellste Lösung für große Arrays angesehen:2) While-Schleife
Eine while-Schleife wird als der schnellste Weg zum Durchlaufen langer Arrays angesehen, wird jedoch im JavaScript-Code normalerweise weniger verwendet:
3) Tun Sie, während
A
do while
dasselbe tut wiewhile
mit einem Syntaxunterschied wie unten:Dies sind die Hauptmethoden zum Ausführen von JavaScript-Schleifen, aber es gibt noch einige weitere Möglichkeiten, dies zu tun.
Außerdem verwenden wir eine
for in
Schleife zum Schleifen von Objekten in JavaScript.Auch Blick auf den
map()
,filter()
,reduce()
etc. Funktionen auf einem Array in JavaScript. Sie können Dinge viel schneller und besser machen als mitwhile
undfor
.Dies ist ein guter Artikel, wenn Sie mehr über die asynchronen Funktionen über Arrays in JavaScript erfahren möchten.
Lesen Sie mehr >> hier :
quelle
Wenn sich jemand für die Leistungsseite der verschiedenen Mechanismen interessiert, die für Array-Iterationen verfügbar sind, habe ich die folgenden JSPerf-Tests vorbereitet:
https://jsperf.com/fastest-array-iterator
Ergebnisse:
Der traditionelle
for()
Iterator ist bei weitem die schnellste Methode, insbesondere wenn er mit der zwischengespeicherten Array-Länge verwendet wird .Die
Array.prototype.forEach()
und dieArray.prototype.map()
Methoden sind die langsamsten Näherungen, wahrscheinlich als Folge des Funktionsaufruf-Overheads .quelle
i = i +1
alsi++
Wenn Sie die jQuery-Bibliothek verwenden, sollten Sie http://api.jquery.com/jQuery.each/ verwenden.
Aus der Dokumentation:
quelle
Ich habe diese Variante noch nicht gesehen, die mir persönlich am besten gefällt:
Gegeben ein Array:
Sie können eine Schleife durchlaufen, ohne jemals auf die Eigenschaft length zuzugreifen:
Sehen Sie sich diese JsFiddle an, die Folgendes demonstriert: http://jsfiddle.net/prvzk/
Dies funktioniert nur für Arrays, die dies nicht sind dünn sind. Dies bedeutet, dass an jedem Index im Array tatsächlich ein Wert vorhanden ist. In der Praxis habe ich jedoch festgestellt, dass ich in JavaScript kaum spärliche Arrays verwende ... In solchen Fällen ist es normalerweise viel einfacher, ein Objekt als Map / Hashtable zu verwenden. Wenn Sie ein Array mit geringer Dichte haben und eine Schleife über 0 .. length-1 durchführen möchten, benötigen Sie das Konstrukt for (var i = 0; i <someArray.length; ++ i), aber Sie benötigen weiterhin ein
if
innerhalb der Schleife um zu überprüfen, ob das Element am aktuellen Index tatsächlich definiert ist.Wie CMS in einem Kommentar unten erwähnt, können Sie dies auch nur für Arrays verwenden, die keine falschen Werte enthalten. Das Array von Zeichenfolgen aus dem Beispiel funktioniert, aber wenn Sie leere Zeichenfolgen oder Zahlen mit 0 oder NaN usw. haben, wird die Schleife vorzeitig abgebrochen. Auch in der Praxis ist dies für mich kaum ein Problem, aber es ist etwas zu beachten, was dies zu einer Schleife macht, über die man nachdenken muss, bevor man es benutzt ... Das kann es für einige Leute disqualifizieren :)
Was ich an dieser Schleife mag, ist:
Der Grund dafür ist, dass die Array-Spezifikation vorschreibt, dass beim Lesen eines Elements aus einem Index> = der Länge des Arrays undefiniert zurückgegeben wird. Wenn Sie an einen solchen Ort schreiben, wird die Länge tatsächlich aktualisiert.
Für mich emuliert dieses Konstrukt am ehesten die Java 5-Syntax, die ich liebe:
... mit dem zusätzlichen Vorteil, dass Sie auch den aktuellen Index innerhalb der Schleife kennen
quelle
0
,false
,NaN
,null
oderundefined
, noch bevori
erreicht die Länge, zum Beispiel: jsfiddle.net/prvzk/1(item=someArray[i]) !== undefined
.Es gibt eine Methode, um nur eigene Objekteigenschaften zu durchlaufen, ohne die des Prototyps:
Es werden jedoch weiterhin benutzerdefinierte Eigenschaften durchlaufen.
In JavaScript kann jedem Objekt eine benutzerdefinierte Eigenschaft zugewiesen werden, einschließlich eines Arrays.
Wenn man über sparsed Array iterieren möchte
for (var i = 0; i < array.length; i++) if (i in array)
oderarray.forEach
mit verwendetes5shim
werden soll.quelle
for (var i in array) if (++i)
?Es gibt verschiedene Möglichkeiten, dies in JavaScript zu tun. Die ersten beiden Beispiele sind JavaScript-Beispiele. Die dritte verwendet eine JavaScript-Bibliothek, dh jQuery nutzt die
.each()
Funktion.quelle
for...in
sollte für Array-ähnliche Objekte vermieden werdenDer eleganteste und schnellste Weg
http://jsperf.com/native-loop-performance/8
Bearbeitet (weil ich mich geirrt habe)
Vergleichen Sie die Methoden zum Durchlaufen eines Arrays von 100000 Elementen und führen Sie jedes Mal eine minimale Operation mit dem neuen Wert aus.
Vorbereitung:
Tests:
quelle
Der optimierte Ansatz besteht darin, die Länge des Arrays zwischenzuspeichern und ein einzelnes var-Muster zu verwenden, das alle Variablen mit einem einzelnen var-Schlüsselwort initialisiert.
Wenn die Reihenfolge der Iteration keine Rolle spielt, sollten Sie die umgekehrte Schleife ausprobieren. Sie ist am schnellsten, da sie das Testen von Overhead-Bedingungen und das Dekrementieren in einer Anweisung reduziert:
oder besser und sauberer während der Schleife zu verwenden:
quelle
In JavaScript gibt es so viele Lösungen, um ein Array zu schleifen.
Der folgende Code ist beliebt
quelle
Wenn Sie jQuery verwenden möchten, enthält die Dokumentation ein schönes Beispiel:
quelle
Meiner Meinung nach ist es am besten, die Funktion Array.forEach zu verwenden. Wenn Sie das nicht verwenden können, würde ich vorschlagen, die Polyfüllung von MDN zu erhalten. Um es verfügbar zu machen, ist es sicherlich die sicherste Möglichkeit, ein Array in JavaScript zu durchlaufen.
Array.prototype.forEach ()
Wie andere vorgeschlagen haben, ist dies fast immer das, was Sie wollen:
Dadurch wird sichergestellt, dass alles, was Sie für die Verarbeitung des Arrays benötigen, innerhalb dieses Bereichs bleibt und dass Sie nur die Werte des Arrays verarbeiten, nicht die Objekteigenschaften und andere Elemente
for ..
Elemente.Verwendung eines normalen C-Stils
for
Schleife funktioniert in den meisten Fällen. Es ist nur wichtig zu bedenken, dass alles in der Schleife seinen Bereich mit dem Rest Ihres Programms teilt. Das {} erstellt keinen neuen Bereich.Daher:
gibt "11" aus - was möglicherweise das ist, was Sie wollen oder nicht.
Ein funktionierendes jsFiddle-Beispiel: https://jsfiddle.net/workingClassHacker/pxpv2dh5/7/
quelle
Es ist nicht 100% identisch, aber ähnlich:
quelle
Zum Beispiel habe ich in einer Firefox-Konsole verwendet:
quelle
Viel sauberer ...
quelle
z.forEach(j => console.log(j));
.Kurze Antwort: ja. Sie können damit machen:
In einer Browserkonsole wird etwas wie "Element1", "Element2" usw. gedruckt angezeigt.
quelle
Sie können entweder verwenden
Array.prototype.forEach(...)
:Oder
Array.prototype.map(...)
:Oder die zuvor erwähnte jquery oder for loop-Wege.
quelle