ここでは、JavaScript関数に配列を送信するための「値による」および「参照による」の受け渡しに関する多くの回答を読みました。ただし、配列を関数に送信し、元の配列を変更しないままにしておくと問題が発生します。この例は、問題を示しています。
function myFunction(someArray)
{
// any function that makes an array based on a passed array;
// someArray has two dimensions;
// I've tried copying the passed array to a new array like this (I've also used 'someArray' directly in the code);
funcArray = new Array();
funcArray = someArray;
var i = 0;
for(i=0; i<funcArray.length; i++)
{
funcArray[i].reverse;
}
return funcArray;
}
この関数の何かが元の配列を変更する必要がある理由がわかりません。
関数呼び出しが新しい配列に割り当てられている場合、この関数を呼び出すと元の配列が直接変更されます。
myArray = [["A","B","C"],["D","E","F"],["G","H","I"]];
anotherArray = new Array();
anotherArray = myFunction(myArray);
// myArray gets modified!;
.valueOf()を使用してプリミティブを送信してみました:
anotherArray = myFunction(myArray.valueOf());
// myArray gets modified!;
配列を要素ごとに、サブ要素ごとにサブ要素ごとに分割し、すべてを新しい2次元配列に割り当てようとしましたが、元の配列は変更されたままです。
また、サブ要素を文字列に結合し、処理し、配列に分割し直しましたが、元の配列は引き続き変更されます。
配列値を関数に渡して、渡された配列を変更しない方法を知っている人はいますか?