2017-01-17 2 views
-3

Ich habe ein Array, das Kameras Spezifikationen enthält, tritt das Problem auf, wenn ich versuche, eine for-Schleife, um die Elemente zu erhalten. HierFor-Schleife funktioniert nicht im Array (Javascript, Angular 2)

ist der Inhalt meiner Array:

enter image description here

habe ich versucht, alle verschiedenen Arten von für Loops wie forEach, Basic for-Schleife mit Inkrementierung oder für (let item of myArray)

For-Schleife doesn‘ t run und ich habe keine Rückgabe des Elements im Array.

for (let id in elements) { 

     if (typeof elements[id].brands !== 'undefined') { 

     delete this.items; 

     let itemsArray = []; 

     for (let elementData of elements[id].brands) { 

      this.http.get("assets/data/" + elementData + "Reflex.json").map(res => res.json()).subscribe(data => { 

      Array.prototype.push.apply(itemsArray, data); 

      }); 

     } 

     this.items = itemsArray; 

     } 

     if (typeof elements[id].sensorSize !== 'undefined') { 


     } 

    } 

(this.items ist das Array, das Sie auf der Oberseite sehen kann (ich benutze Angular2)).

+2

Sie sind wahrscheinlich 'this.items' über einen HTTP-Aufruf bekommen und es ist durch die Zeit, um Ihren Code der Schleife erreicht undefiniert. – echonax

+0

Haben Sie die einfachste Schleife ausprobiert? für (zB i = 0; i rrd

+0

können Sie den Code hinzufügen, in dem Sie die for-Schleife ausführen? –

Antwort

0

Probieren Sie diesen Code aus, er wird das Array selbst durchlaufen und alle Objekte als Objekte in der Inline-Funktion zurückgeben.

this.items.forEach(function (item) 
{ 
item.xxx=11; 
}); 
+0

OP hat alle Arten von For-Schleife versucht .. Lesen Sie die Frage –

+0

Als ich begann, die Antwort in meinem Handy zu bearbeiten, gab es noch keine Beiträge, so wusste nicht, dass jemand das gleiche schreibt. –

+0

@torazaburo sry..der Kommentar wurde auf Miro gerichtet –

0

Dieser Aufruf ist die problem.It asynchrone ist.

Die for-Schleife wartet nicht auf die Antwort, um Daten in itemArray zu schieben. Eine grobe Art und Weise das Array zu bekommen ist:

 this.http.get("assets/data/" + elementData + "Reflex.json").map(res => res.json()).subscribe(data => { 

     Array.prototype.push.apply(this.items, data);//make sure this.items is set to empty previous to call 

     });