dedlfix: Funktion greift nicht auf Variable zu...

Beitrag lesen

Tach!

P.S.: ok, ist natürlich so, dass ich die Werte aus der Funktion auch zurückgeben muss, daher in die Richtung:

Der Grund ist, dass die Argumente lediglich als Kopie reingereicht werden. Bei Objekten sind es zwar Referenzen, aber du weist die Referenzen lediglich internen Variablen zu. Somit passiert außerhalb der Funktion nichts.

var Array_vertauscht = Tausch(Tauschobjekt1, Tauschobjekt2);
[Tauschobjekt1, Tauschobjekt2] = Array_vertauscht;

...aber ist das tatsächlich der beste gangbare Weg?

Es geht ganz ohne Funktion, und die Teile dazu hast du bereits eben verwendet: Array Construction und Destructuring.

[b, a] = [a, b]

Das ist zumindest der Tauschvorgang. In deiner Funktion war noch zu sehen, dass der Tauschvorgang nur in Abhängigkeit von zwei globalen Werten stattfinden soll. Das ist eine sehr ungünstige Vorgehensweise, denn man sieht es der Funktion nicht an, dass diese beiden globalen Werte vorausgesetzt werden. Übergib lieber diese beiden Werte als zusätzliche Argumente - also falls du nun überhaupt noch eine Funktion erstellst.

Wenn der Vergleich wichtig ist, kann man den auch in einem Ausdruck mit ternärem Operator unterbringen.

[a, b] = x > y ? [b, a] : [a, b];

Etwas unschön daran ist, dass im Kleiner-als-Fall effektiv [a, b] = [a, b] ausgeführt wird, aber das passiert ja auch für Argumente und Rückgabewerte, wenn du das in eine Funktion packst.

if (x > y)
  [a, b] = [b, a];

Das wäre ein Ausweg, aber je nachdem, was du mit den ausgetauschten Werte vorhast, ergibt sich vielleicht eine andere Bewertung der beiden Vorgehensweisen.

Außerdem verwendest du in deiner Funktion diese Zeile

var Platzhalter = [...o2];

Die erstellt effektiv eine Kope des Arrays in o2, also wie o.slice(). Doch du weist das Funktionsergebnis wieder denselben Variablen zu (nur ausgetauscht), so dass diese Kope keinen Sinn ergibt, weil das gleich aussehende Original verschwindet und nicht mehr für andere Verarbeitungen verwendet werden kann. Da kann man gleich beim Original bleiben. Aber das hat sich auch mit erledigt, wenn du denn oben genannten Tauschvorschlag nimmst.

dedlfix.