Sto provando a scrivere una funzione Javascript abbastanza semplice, e sperimentando un comportamento che non capisco quando iterare la funzione.problema con la chiamata di una funzione javascript due volte
Ho distillato il problema fino alla seguente situazione. Voglio scrivere una funzione che prenda come input un array costituito da matrici di array, ad es. A = [[[1]]]
. Non conosco la terminologia standard per questo, quindi mi riferirò all'array principale come "livello 0", che ha elementi che sono matrici di "livello 1". Dirò che gli array di livello 1 consistono in array di "livello 2". Le matrici di livello 2 sono costituite da numeri interi.
La funzione fa seguito, sull'ingresso A
(un array di livello 0):
- creare un array vuoto
L
; - per ciascun livello 1 matrice
M
inA
- aggiungere uno a ciascuna voce integer in ogni matrice livello 2
M
; - aggiungono due copie di
M
alL
- aggiungere uno a ciascuna voce integer in ogni matrice livello 2
- ritorno
L
.
Ecco il mio codice:
function myFunc(A){
var L = [];
for(var a=0; a<A.length; a++){
var M = A[a].slice(0);
for(var i=0; i<M.length; i++){
for(var j=0; j<M[i].length; j++){
M[i][j]++;
}
}
for(var s=0; s<2; s++){
var N = M.slice(0);
L.push(N);
}
}
return(L);
}
Ora provarlo:
var A = [[[1]]];
A = myFunc(A)
Dopo questo, ho A = [[[2]],[[2]]]
, che è quello che mi aspetto. Tuttavia, supponiamo che io iterare che:
var A = [[[1]]];
A = myFunc(A);
A = myFunc(A);
Poi mi aspetto di ottenere A = [[[3]],[[3]],[[3]],[[3]]]
, ma invece ho A = [[[4]],[[4]],[[4]],[[4]]]
.
D'altra parte se corro myFunc([[[2]],[[2]]])
, ottengo il previsto [[[3]],[[3]],[[3]],[[3]]]
.
Non capisco da dove provenga questa discrepanza.
Questo non è il problema. La funzione chiamata due volte non ha gli stessi risultati, legge di nuovo la sua domanda. Sto indagando e ho un vantaggio credo che sia –
Probabilmente è un valore di riferimento rispetto a uno copiato. Prova A = JSON.parse (JSON.stringify (A)) tra le tue chiamate A = myFunct (A). Non riesco a testare che io sia sul mio iPhone –
@FlavienVolken sì che lo risolve ma non capisco perché sta fallendo qui. : o –