Quelle von wi2l.de/sof.html

var x = -1;
var a = new Array(9);
var i = new Array(2);

x = x + 1;
a[x] = ["a", "b"];
x = x + 1;
a[x] = ["c", "d"];
i[0] = "e";
i[1] = "f";
x = x + 1;
a[x] = i;
i[0] = "g";
i[1] = "h";
x = x + 1;
a[x] = i;

console.log(a[1] + " " + a[2] + " " + a[3]);

Ergebnis ist c,d g,h g,h, sollte aber c,d e,f g,h sein.

1
Erich Will 19 Feb. 2020 im 20:28

3 Antworten

Beste Antwort

A [2] scheint auf die Speicheradresse von i zu verweisen und ihren Wert nicht wiederherzustellen.

Um dem entgegenzuwirken, müssen Sie den Wert von i wiederherstellen. Sie können es so machen:

a[x] = Object.values(i)

0
Satoshi 19 Feb. 2020 im 17:43

Der Code macht das, was im Inhalt von Array a erwartet wird: [["a","b"],["c","d"],i,i]

Da Sie den Wert von i in [g,h] ändern, ändern Sie ihn an beiden Stellen. Wenn Sie eine Kopie des Arrays erstellen möchten, können Sie diese ändern

x=x+1;
a[x]=i;

Zu:

i[0] = "e";
i[1] = "f";
x = x + 1; 
a[x] = [...i]; //creates a new array with the contents of i
i[0] = "g";
i[1] = "h";
x = x + 1; 
a[x] = i;

Dies führt zu [["a","b"],["c","d"],["e","f"],i]

0
David R 19 Feb. 2020 im 17:42
i[0] = "e"; // these two lines
i[1] = "f";
x = x + 1;
a[x] = i;
i[0] = "g"; // are changing the same array as these two lines
i[1] = "h";

Wenn Sie also das Array i hinzufügen und seinen Wert ändern, ändert es sich überall dort, wo Sie dieses Array verwendet haben. Es macht keine Kopie oder so.

1
TKoL 19 Feb. 2020 im 17:33