2016-04-27 6 views
0

Beim Versuch, mein neues Objekt mit eindeutigen numerischen Werten basierend auf der aktuellen Iteration meiner for-Schleife zu initialisieren, habe ich festgestellt, dass nur der letzte numerische Wert zugewiesen wird. Zum Beispiel, wenn der Zähler der Schleife bei 12 stoppen soll, erwarte ich, dass 12 Objekte von der Variablen ausgeloggt werden, stattdessen werde ich nur die zwölfte Iteration protokolliert bekommen. Ich habe versucht, es in einen Verschluss zu wickeln, und immer noch kein Glück. Ich logge die 12 Objekte innerhalb der Schleife aus, kein Problem, aber wenn außerhalb der Schließung, ist nur die letzte Iteration verfügbar.Nur letzte Iteration dem Objekt zuweisen

Bearbeiten: Um einen besseren Überblick zu geben, hier ist mein Link auf Heroku meines Projekts. Grundsätzlich möchte ich in meinem Textfeld "40" eingeben, dann nehme ich diese 40 auf, setze sie auf meinen this.state.text, benutze diese als meine Kontrollvariable in meiner Schleife und erstelle 40 Pferde auf dem Bildschirm. Um nicht die aktuellen Pferde auf dem Bildschirm zu verlieren, versuche ich, ein neues Objekt (StudentsNew) zu erstellen und dann eine flache Zusammenführung durchzuführen.

http://aqueous-tor-94316.herokuapp.com/

var StudentsNew; 
    for(var i = 0; i <= this.state.text; i++){ 
     (function(index){ 
      StudentsNew = { [index]:{ left: 100, top: 100 } }; 
     })(i); 
    } 
    console.log(StudentsNew); 
+0

Sie überschreiben StudentNew jede Iteration. Erwarten Sie, dass es 12 StudentNew-Variablen geben wird - warum? – Shikloshi

+0

Versuchen Sie, das Objekt {left: 100, top: 100} in jeden Index eines Arrays zu schieben? – erichardson30

+0

Eine Variable kann nur einen einzelnen Wert enthalten. Sie können [ein Array] (http://eloquentjavascript.net/04_data.html) verwenden, um eine Werteliste zu speichern. –

Antwort

2

Ich glaube, ich sehe, was Sie tun möchten:

var StudentsNew = {}; 
for(var i = 0; i <= this.state.text; i++){ 
    StudentsNew[i] = {left: 100, top: 100}; 
} 
console.log(JSON.stringify(StudentsNew)); 

Ausgang:

{ "0": { "links": 100, "top" : 100}, "1": {"links": 100, "top": 100}, "2": {"links": 100, "oben": 100}, "3": {"links": 100 , "top": 100}, "4": {"links": 100, "oben": 100}, "5": {"links": 100, "oben": 100}, "6": {" links ": 100," oben ": 100}," 7 ": {" links ": 100," oben ": 100}," 8 ": {" links ": 100," oben ": 100}," 9 ": {" links ": 100," oben ": 100}," 10 ": {" links ": 100," oben ": 100}," 11 ": {" links ": 100," oben ": 100}," 12 ": {" links ": 100," top ": 100}}

+0

Nein, es muss ein Objekt sein, kein Array. Dies ist nur ein kleiner Ausschnitt meines Projekts. Ich verwende React-DnD, um einige Drag & Drop-Operationen durchzuführen. –

+0

Justin, es protokolliert kein Array, sondern ein Objekt – akniazi

+0

Vielen Dank. Ich werde das sofort akzeptieren –