Ich versuche, ein Array von Objekten einem anderen Array zuzuordnen, aber wenn ich das neue Array erstellt habe und in anderen Funktionen den Wert ändere, ändert sich auch das ursprüngliche Array (was nicht ok). Könnte ich einen anderen Weg benutzen? Dies ist ein Beispiel: http: //codepen.io/Xiwi/pen/rLMbYpArray eines Objekt-Inhalts einem neuen Array zuweisen
2
A
Antwort
3
Sieht so aus, als müssten Sie das Array kopieren/klonen, damit es nicht durch Referenz geändert wird.
Wenn Sie nur Primitive Types im Array Sie so tun können:
var test3 = JSON.parse(JSON.stringify(test2));
sonst benötigen Sie eine rekursive Lösung und spezifischere in Ihrer Frage zu sein.
Beispiel:
var test1 = [{name: 'test1'}];
var test2 = [{name: 'test2'}];
var test3 = JSON.parse(JSON.stringify(test2));
test3[0].name = 'test3';
// Open console
console.log('Test2: ',test2[0]); // Object {name: "test2"}
console.log('Test3: ',test3[0]); // Object {name: "test3"}
0
Objekte sind im wesentlichen Referenzen. Sie müssen ein neues Objekt erstellen und die Werte eines anderen Objekts zuweisen:
var test3 = [ Object.assign({}, test2[0]) ];
0
Verwenden Sie einfache .map
ein Array von Objekten in einen anderen zu kopieren.
var test1 = [{name: 'test1'}];
var test2 = [{name: 'test2'}];
//var test3 = test2.slice(0); //doesn't work. objects are still references
var test3 = test2.map(function(obj){
//return obj; //doesn't work. objects are still references
var o={}; //create brand new object
for(var prop in obj)
o[prop]=obj[prop];//assign properties
return o;//works
});
test3[0].name = 'test3';
// Open console
console.log('Test2: ',test2[0]);
console.log('Test3: ',test3[0]);
Sie müssen nicht serialisiert werden, glaube ich '[] .splice (0,0, arr);' eine Kopie von Primitiven – kirinthos
leider 'do [] .concat (arr)' – kirinthos
@kirinthos Nein. So haben Sie das gleiche Problem. Überprüfen Sie hier: https://jsfiddle.net/jbL0vm9m/ – Sergio