[JS] Variable lässt sich in einer For-Schleife nicht wie gewollt zwischenspeichern

  • Heyho,
    ich hab gestern einen kleinen Scramble-Generator für Rubiks Cubes in PHP programmiert. Heute wollte ich das ganze in Javascript umschreiben. Soweit klappte alles auch ganz gut, allerdings gibts ein kleines Problem mit der Vorschau des Würfels.


    Der gesamte Code ist hier zu finden: http://codepen.io/MyXoToD/pen/wFxJh


    Im Javascript-Bereich geht es mir um den Bereich bei Zeile 107. Dort laufe ich in einer Schleife durch jeden Move im Scramble und "drehe" somit die ebenen. Nach jedem Durchlauf sollte in tmpCube die aktuelle Positionierung des Würfels stehen. Das scheint hier aber nicht wirklich zu klappen.
    Wenn man nur einen Zug im Scramble macht, klappt alles aber sobald man 2 oder mehr macht, kommt es nicht mehr klar mit der Eingabe. In meiner PHP Version klappt das super...
    Was mache ich hier bei Javascript falsch? Wie kann ich nach jedem durchlauf den aktuellen Stand des Würfels richtig abspeichern, damit dieser beim nächsten Durchlauf verwendet wird?


    Hoffe mir kann hier jemand die Welt erklären :D

  • also ich bin zwar mit den würfeldingern vollstens überfordert und hab auch in deinem code direkt nicht gefunden, was mir auffallen würde /aufgefallen ist.


    aber evtl liegts daran, dass in javascript objekte nen call by reference bekommen und simple datentypen nen call by value.
    denn damit würdest du hier:
    newCube = cube;
    und hier:
    tmpCube = newCube;


    letztendlich nur nen zeiger umbiegen, aber an sich nur an "cube" agieren :)
    wobei ich akuter weise auch jetzt nicht weiß, ob es sowas wie ne native copy oder clone-funktion gibt im js, hab sowas bisher nicht gebraucht.

  • Sowas dachte ich mir schon irgendwie. Nur hab ich auch keine Idee, wie man das anders machen könnte... Irgendwie muss es ja aber machbar sein, denke ich. Wenn ich in dem For-Block direkt die Daten aus tmpCube in cube schreibe, passiert auch nur mist. Liegt aber vermutlich auch hier daran, dass ich nach den Durchläufen nicht immer den aktuellen Stand übergeben kann... Hmmm.


    Edit:
    Nun hab ich etwas völlig verrücktes rausgefunden... Anscheinend werden die Daten doch richtig zwischengespeichert aber nicht alle Oo Wie geht denn das...
    Wenn ich den besagten Teil wiefolgt umschreibe:


    dann sind immer die letzten 3 Veränderungen falsch. Sprich in diesem Fall newCube D3, D6 und D9 sind zum Schluss falsch. Bei den anderen ist es richtig. Das versteh ich nicht :O

  • also wieso nur 3 falsch sind, kann ich dir nicht sagen, da musste nochmal explizit die werte per hand vergleichen.
    aber das konstrukt hier ist auch seltsam:


    Code
    1. var newCube = new Array();
    2. newCube = cube;


    da bräuchteste die faxe mit dem new Array() ja nicht. an der stelle würde ich nen concat nehmen, um NUR die werte aus cube in newcube zu bekommen.