for - javascript while loop




Was ist der beste Weg, um Loops in JavaScript zu machen? (6)

Also, zuerst identifizieren Sie die perfekte JavaScript-Schleife, ich glaube, es sollte so aussehen:

ary.each (Funktion () {$ Argumente [0]). remove ();})

Dies erfordert möglicherweise die Bibliothek prototype.js.

Als nächstes werden Sie mit dem Argument [0] disgustet und der Code wird automatisch von Ihrem Server-Framework erzeugt. Dies funktioniert nur, wenn die Leiter Seaside ist.

Jetzt haben Sie das obige generiert von:

ary do: [: jedes | jedes Element entfernt].

Dies wird komplett mit Syntax-Vervollständigung und übersetzt genau zu den oben genannten Javascript. Und es wird den Leuten den Kopf schütteln, die noch nicht die Prototyp-Integration von Seaside benutzt haben, als sie Ihren Code gelesen haben. Es macht dich sicher auch cool. Ganz zu schweigen von dem Gewinn an Geekiness, den du hier bekommen kannst. Die Mädchen lieben es!

Ich bin auf verschiedene Methoden des JavaScript-Schleifens gestoßen. Was ich am meisten mag, ist:

for(var i = 0; i < a.length; i++){
    var element = a[i];
}

Aber wie hier getestet ( http://www.robertnyman.com/2008/04/11/javascript-loop-performance/ ), sollte es wahrscheinlich so geschrieben werden, dass die Länge nur einmal berechnet wird.

In jQuery gibt es eine Möglichkeit, eine Funktion anzubringen. Ich mag das ein bisschen besser, weil ich das Array nicht zweimal eingeben muss, wie in der obigen Lösung.

Wenn JavaScript Makros unterstützt, wäre es ein Kinderspiel, selbst zu rollen, aber das tut es leider nicht.

Also, was benutzt ihr?


Ich benutze es nicht selbst, aber einer meiner Kollegen benutzt diesen Stil:

var myArray = [1,2,3,4];
for (var i = 0, item; item = myArray[i]; ++i) {
    alert(item);
}

Wie Ashs Antwort wird dies Probleme verursachen, wenn Sie "falsche" Werte in Ihrem Array haben. Um dieses Problem zu vermeiden, ändern Sie es in (item = myArray[i]) != undefined


Ich sehe nicht, was das Problem mit einem Standard für (;;) Schleife ist. Ein kleiner Test

var x;
var a = [];
// filling array
var t0 = new Date().getTime();
for( var i = 0; i < 100000; i++ ) {
    a[i] = Math.floor( Math.random()*100000 );
}

// normal loop
var t1 = new Date().getTime();
for( var i = 0; i < 100000; i++ ) {
    x = a[i];
}

// using length
var t2 = new Date().getTime();
for( var i = 0; i < a.length; i++ ) {
    x = a[i];
}

// storing length (pollution - we now have a global l as well as an i )
var t3 = new Date().getTime();
for( var i = 0, l = a.length; i < l; i++ ) {
    x = a[i];
}

// for in
var t4 = new Date().getTime();
for( var i in a ) {
    x = a[i];
}

// checked for in
var t5 = new Date().getTime();
for( var i in a ) {
    if (a.hasOwnProperty(i)) {
        x = a[i];
    }
}

var t6 = new Date().getTime();
var msg = 'filling array: '+(t1-t0)+'ms\n'+
          'normal loop: '+(t2-t1)+'ms\n'+
          'using length: '+(t3-t2)+'ms\n'+
          'storing length: '+(t4-t3)+'ms\n'+
          'for in: '+(t5-t4)+'ms\n'+
          'checked for in: '+(t6-t5)+'ms';
console.log( msg );

Ergebnisse in:

filling array: 227ms
normal loop: 21ms
using length: 26ms
storing length: 24ms 
for in: 154ms
checked for in: 176ms

Also: - für In dauert die längste Zeit, die length -Eigenschaft (die eine Eigenschaft ist und nicht berechnet werden muss) ist fast so schnell wie die erste - das ist nur ein Whisker langsamer als die Verwendung einer ganzen Zahl.
AND a for () ist der übliche Weg, um ein Array zu durchlaufen, das jeder erwartet und versteht.

Alle fügen eine Variable zu dem Bereich hinzu, in dem sie ausgeführt werden. Dies ist ein gebräuchlicher Name für diese Verwendung und sollte daher nicht für andere Dinge verwendet werden. Wenn Sie zuerst die Länge speichern, wird dem Bereich eine weitere Variable hinzugefügt - was unnötig ist


Ich weiß, dass ich zu spät zur Party komme, aber ich benutze Reverse-Loops für Loops, die nicht von der Reihenfolge abhängen.

Sehr ähnlich wie @Mr. Muskrat - aber vereinfacht den Test:

var i = a.length, element = null;
while (i--) {
  element = a[i];
}

Sie könnten einfach immer eine while-Schleife verwenden und die Array-Grenze vorher berechnen.

Var max = a.length-1;
var i = 0;

while(i <= max)
{
var element = a[i];
i++;
}

Speichern Sie die Länge zuerst in einer Variablen.

  var len = a.length;
  for (var i = 0; i < len; i++) {
    var element = a[i];
  }




macros