Ich versuche, eine ziemlich einfache Javascript-Funktion zu schreiben, und Verhalten zu erfahren, verstehe ich nicht, wenn ich die Funktion iterieren.Problem mit dem Aufrufen einer JavaScript-Funktion zweimal
Ich habe das Problem auf die folgende Situation destilliert. Ich möchte eine Funktion schreiben, die als Eingabe ein Array verwendet, das aus Arrays von Arrays besteht, z. A = [[[1]]]
. Ich kenne die Standardterminologie dafür nicht, deshalb werde ich das Hauptarray als "Level 0" bezeichnen, das Elemente enthält, die Arrays von "Level 1" sind. Ich werde sagen, dass die Level-1-Arrays aus Arrays von "Level 2" bestehen. Die Level-2-Arrays bestehen aus ganzen Zahlen.
Die Funktion hat die folgende, auf Eingabe A
(a-Ebene-0-Array):
- ein leeres Array erstellen
L
; - für jede Ebene 1 Array
M
inA
- eine in
M
in jeder Ebene 2 Array zu jedem ganzzahligen Eintrag hinzufügen; - zwei Kopien von
M
-L
- eine in
- Rückkehr
L
hinzuzufügen.
Hier ist mein Code:
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);
}
Jetzt habe ich es testen:
var A = [[[1]]];
A = myFunc(A)
Danach, ich A = [[[2]],[[2]]]
bekommen, das ist, was ich erwarte. Allerdings nehme ich es wiederholen:
var A = [[[1]]];
A = myFunc(A);
A = myFunc(A);
Dann erwarte ich A = [[[3]],[[3]],[[3]],[[3]]]
zu erhalten, sondern ich habe A = [[[4]],[[4]],[[4]],[[4]]]
.
Auf der anderen Seite, wenn ich myFunc([[[2]],[[2]]])
ausführen, bekomme ich die erwartete [[[3]],[[3]],[[3]],[[3]]]
.
Ich verstehe nicht, wo diese Diskrepanz herkommt.
Das ist nicht das Problem. Die Funktion hat beim zweimaligen Aufruf nicht die gleichen Ergebnisse, lesen Sie die Frage erneut. Ich untersuche und ich habe eine Spur, glaube ich –
Es ist wahrscheinlich ein referenzierter Wert vs eine kopierte. Probieren Sie A = JSON.parse (JSON.stringify (A)) zwischen Ihren A = myFunct (A) -Aufrufen aus. Ich kann nicht testen, ich bin auf meinem iPhone –
@FlavienVolken ja das löst es, aber ich verstehe nicht, warum es hier versagt. : o –