Ho letto qui molte risposte relative a "in base al valore" e "in base al riferimento" che passano per l'invio di matrici a funzioni javascript. Tuttavia, ho un problema nell'invio di un array a una funzione e l'inalteramento della matrice originale. Questo esempio illustra il problema:Javascript passa array a funzioni in base al valore, lasciando inalterato l'array originale
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;
}
Non riesco a capire perché qualsiasi cosa in questa funzione dovrebbe alterare l'array originale.
richiamare questa funzione modifica direttamente la matrice originale se la chiamata funzione è assegnata a un nuovo array:
myArray = [["A","B","C"],["D","E","F"],["G","H","I"]];
anotherArray = new Array();
anotherArray = myFunction(myArray);
// myArray gets modified!;
Ho provato ad utilizzare .valueOf() per inviare il primitivo:
anotherArray = myFunction(myArray.valueOf());
// myArray gets modified!;
I Ho anche provato a spezzare l'elemento array down per elemento e sottoelemento per sub-elemento e assegnare tutto a un nuovo array 2-d e l'array originale viene ancora modificato.
Ho anche unito i sottoelementi a una stringa, li ho elaborati, li ho divisi in array e l'array originale viene ancora modificato.
Per favore, qualcuno sa come posso passare i valori dell'array a una funzione e non avere la matrice passata cambiare?
Mi dispiace, ho dimenticato di menzionare che il metodo slice non fa alcuna differenza. Ho visto questo accennato e provato, ma non smette di cambiare l'array originale (nemmeno .valueOf() che dovrebbe ridurre il contenuto dell'array alla primitiva) –
Ho esplorato l'idea di slice() ancora e ancora il problema sta nel fatto che è un array 2-d. Se affetto l'array esterno, non fa alcuna differenza, l'array originale viene ancora modificato. Tuttavia, se divido ogni sub-array, funziona! Ho impostato un ciclo per ciascun elemento esterno e assegnato la sua sezione all'elemento esterno di un nuovo array. –