JavaScript のスコープと可変性について学ぶために、次のダミーの割り当てが与えられました。
この演習では、reverseArray と reverseArrayInPlace の 2 つの関数を記述します。最初の reverseArray は、配列を引数として取り、同じ要素を逆の順序で持つ新しい配列を生成します。2 番目の reverseArrayInPlace は、reverse メソッドと同じことを行います。要素を逆にするために、引数として指定された配列を変更します。どちらも、標準のリバース メソッドを使用することはできません。
私は reverseArray 関数のコーディングに成功し、reverseArrayInPlace 関数に再利用したいと考えました。私は関数の 3 つのバージョンをコーディングしましたが、一部が機能し、一部が機能しない理由が本当にわかりません。この JavaScript の動作についてご説明いただければ幸いです。(reverseArrayInPlace を解決する他の方法があることは知っていますが、私のアプローチが機能しない理由を知りたいです)。
// Reverses an array given as argument and returns it as a NEW array.
function reverseArray(myArray){
var reversedArray = [];
for(var i=0; i<myArray.length; i++){
reversedArray.unshift(myArray[i]);
}
return reversedArray;
}
/*
Reverse the original array in place
*/
// DOESN'T WORK
function reverseArrayInPlace1(myArray){
myArray = reverseArray(myArray);
}
// DOESN'T WORK
function reverseArrayInPlace2(myArray){
var original = [];
for (var i=0; i<myArray.length; i++) {
original[i]=myArray[i];
}
myArray = reverseArray(original);
}
// WORKS
function reverseArrayInPlace3(myArray){
var original = [];
for (var i=0; i<myArray.length; i++) {
original[i]=myArray[i];
}
var newArray = reverseArray(original);
for (var i=0; i<myArray.length; i++) {
myArray[i]=newArray[i];
}
}
miArreglo = ["a", "b", "c", "d" ];
console.log("MyArray: ", miArreglo);
arregloRever=reverseArray(miArreglo);
console.log("Reversed using reverseArray: ", arregloRever);
reverseArrayInPlace1(miArreglo);
console.log("Reversed using reverseArrayInPlace1: ",miArreglo);
reverseArrayInPlace2(miArreglo);
console.log("Reversed using reverseArrayInPlace2: ",miArreglo);
reverseArrayInPlace3(miArreglo);
console.log("Reversed using reverseArrayInPlace3: ",miArreglo);