javascript関数に配列を送るための 'by value'と 'by reference'に関する多くの答えをここで読んでいます。私はしかし、関数に配列を送信し、元の配列を変更しないままにする問題があります。この例では、問題を説明しています。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-d配列に割り当てようとしても、元の配列はまだ変更されました。
私はまた、サブ要素を文字列に結合し、それらを処理し、それらを配列に分割して元の配列を変更します。
配列の値を関数に渡して、渡された配列の変更をどのようにすることができますか?
申し訳ありませんが、私はスライス方法も違いはないことを忘れていました。私はこれを参照して、それを試してみましたが、元の配列の変更を停止しません(配列の内容をプリミティブに減らすはずの.valueOf()もありません) –
私は今slice問題はそれが2-d配列であることにあります。外側の配列をスライスしても差はなく、元の配列は変わりません。しかし、もし私が各サブアレイをスライスすれば、それは動作します!私は外側の要素ごとにループを設定し、そのスライスを新しい配列の外側の要素に割り当てました。 –