我已經閱讀了許多有關'按值'和'通過引用'傳遞給javascript函數的答案。然而,我有一個問題發送一個數組到一個函數,並保持原來的數組不變。這個例子說明了這個問題: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維數組,並且原始數組仍然被修改。
我也加入了一個字符串的子元素,處理它們,將它們拆分回數組,並且原始數組仍然被修改。
請問,有沒有人知道我可以傳遞數組值到一個函數,而不是通過數組更改?
對不起,我忘了提及slice方法也沒有區別。我已經看到了這個提到並嘗試了它,但它並沒有停止原來的數組更改(也沒有.valueOf()這應該是減少數組內容爲原始) –
我現在已經探索了slice()的一些想法,問題在於它是一個二維數組。如果我切片外部數組,它沒有區別,原始數組仍然被改變。但是,如果我切片每個子陣列,它的作品!我爲每個外部元素設置一個循環,並將其切片分配給新數組的外部元素。 –