Tôi đã đọc nhiều câu trả lời ở đây liên quan đến 'theo giá trị' và 'theo tham chiếu' để gửi mảng tới hàm javascript. Tuy nhiên tôi có một vấn đề gửi một mảng đến một chức năng và để lại mảng ban đầu không thay đổi gì. Ví dụ này sẽ giải quyết vấn đề:Mảng truy cập Javascript cho hàm theo giá trị, để mảng gốc không bị thay đổi
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;
}
Tôi không thể hiểu tại sao mọi thứ trong hàm này phải thay đổi mảng ban đầu.
gọi chức năng này trực tiếp làm thay đổi mảng ban đầu nếu cuộc gọi chức năng được gán cho một mảng mới:
myArray = [["A","B","C"],["D","E","F"],["G","H","I"]];
anotherArray = new Array();
anotherArray = myFunction(myArray);
// myArray gets modified!;
tôi đã cố gắng sử dụng .valueOf() để gửi nguyên thủy:
anotherArray = myFunction(myArray.valueOf());
// myArray gets modified!;
tôi thậm chí đã cố gắng phá vỡ phần tử mảng xuống bởi phần tử và phần tử con theo phần tử con và gán tất cả cho một mảng 2-d mới và mảng ban đầu vẫn được sửa đổi.
Tôi cũng đã tham gia các phần tử con vào một chuỗi, xử lý chúng, chia chúng thành mảng và mảng ban đầu vẫn được sửa đổi.
Xin vui lòng, không ai biết làm thế nào tôi có thể vượt qua các giá trị mảng cho một hàm và không có thay đổi mảng đã qua?
Xin lỗi, tôi quên đề cập rằng phương pháp cắt lát cũng không tạo ra sự khác biệt nào. Tôi đã nhìn thấy điều này đã đề cập và thử nó nhưng nó không ngăn chặn sự thay đổi mảng ban đầu (không .valueOf() được cho là để giảm nội dung mảng thành nguyên thủy) –
Bây giờ tôi đã khám phá ý tưởng slice() một số chi tiết và vấn đề nằm trong nó là một mảng 2-d. Nếu tôi cắt mảng bên ngoài, nó sẽ không có sự khác biệt, mảng ban đầu vẫn bị thay đổi. Tuy nhiên, nếu tôi cắt từng mảng phụ, nó hoạt động! Tôi thiết lập một vòng lặp cho mỗi phần tử bên ngoài và gán slice của nó cho phần tử bên ngoài của một mảng mới. –