2013-09-21 10 views
5

Wir haben eine Schleife wie folgt aus:Wie die erste Iteration in einer for..in-Schleife identifizieren

for (var prop in obj) { 
    if (obj.hasOwnProperty(prop) { 
     // Here need operation only for first iteration (1) 
     // Other operations 
    } 
} 

Wie können wir erste Iteration in (1) identifizieren?

+2

verwenden können Warum Sie nur die erste Iteration benötigen? Angesichts der Tatsache, dass die Eigenschaften nicht garantiert in einer vorhersagbaren Reihenfolge aufgeführt sind, was machst du da? –

+0

Ich möchte überprüfen Objekt hat mindestens eine Eigenschaft oder nicht. Object.keys - gute Lösung, aber IE8 nicht unterstützt. Ich kompiliere URL von js-Objekt - für das erste Element muss "?" Delimeter, für andere '&'. Reihenfolge der Schlüssel ist nicht wichtig für mich. – karavanjo

Antwort

9

Wenn Sie es aus der Schleife bewegen:

do_one_time_thing(); 
for (var prop in obj) { 
    if (obj.hasOwnProperty(prop)) { 
     // Other operations 
    } 
} 

Andernfalls ein Flag gesetzt, und die untere es nach der ersten Iteration:

var first_iteration = true; 
for (var prop in obj) { 
    if (obj.hasOwnProperty(prop)) { 
     if (first_iteration) { 
      do_one_time_thing(); 
      first_iteration = false; 
     } 
     // Other operations 
    } 
} 
+0

Danke. Ich kann es nicht aus der Schleife entfernen, weil ich prüfen muss, ob das Objekt mindestens eine Eigenschaft hat. fardjad schlug eine Lösung vor, um Eigenschaften eines Objekts zu erhalten. – karavanjo

5

Da es keine Schleifenzähler ist, müssen Sie dies verfolgen, selbst:

var first = true; 

for (var prop in obj) { 
    if (obj.hasOwnProperty(prop) { 
     if (first) { 
     first = false; 
     // Here need operation only for first iteration (1) 
     } 
     // Other operations 
    } 
} 
+0

Danke. Ich frage mich, ob es eine Lösung ohne Verwendung der Flagge gibt? – karavanjo

+1

Sie benötigen eine Flagge * irgendwo *. Ohne zu wissen, was Sie dort tun wollen, ist es schwer, mehr zu sagen oder zu verstehen, warum die Flagge ein Problem ist. –

3

Eigenschaften sind nicht garantiert, in einer vorhersagbaren Reihenfolge aufgeführt zu werden (wie andere sagte).

So können Sie Object.keys verwenden, um die Objekteigenschaften als ein Array zu erhalten, das Array sortieren und das erste Element erhalten:

var firstProperty = Object.keys(obj).sort()[0]; 
// firstValue = obj[firstProperty]; 
+0

Object.keys - gute Lösung, aber es [wird nicht in IE8 unterstützt] (http://kangax.github.io/es5-compat-table/#Object.keys). – karavanjo

1

Sie Unter der Annahme, egal, was das erste Element ist, dann können Sie verwenden Object.keys() mit .forEach() zu vermeiden, eine Flagge zu verwenden.

Mit diesem müssen Sie auch nicht .hasOwnProperty() verwenden, weil Object.keys() das für Sie behandelt.

Object.keys(obj).forEach(function(key, i) { 
    if (i === 0) { 
     console.log("first", obj[key]); 
    } 
    console.log(obj[key]); 
}); 
0

Sie forEach

array.forEach((element,index) => { 
    if(index==0){ 
     // first element 
     }else{ 
      // not first element 
     } 
     }); 
Verwandte Themen