2016-08-05 34 views
2

Hallo ich bin mir bewusst dieses Thema wurde in früheren Posts behandelt, aber ich habe immer noch nicht das Ergebnis, das ich brauche. Ich versuche, eine Kopie von einem Array von Objekten zu erstellen, die seine eigene Version des Originals sein werden, und die anderen Daten nicht beeinflussen, wenn Änderungen vorgenommen werden. Bis jetzt funktioniert das Kopieren eines Arrays von Ints gut, wenn ich slice() verwende, aber nicht für Vektor von Objekten. Es wurde in einem anderen Post erwähnt, dass slice() auf Vektor von Objekten immer noch auf die Objekte verweist, also gibt es eine Möglichkeit, es nur nach Wert zu tun. Vielen Dank.versucht Array von Objekten nach Wert zu kopieren nicht Referenz

property var array: new Array 


Rectangle{id: ob1; width:50; height:50; color: "red"; property int num: 1} 
Rectangle{id: ob2; width:50; height:50; x: 50; color: "blue"; property int num: 2} 
Rectangle{id: ob3; width:50; height:50; x: 100; color: "green"; property int num: 3} 

Component.onCompleted: { 

    array.push(ob1) 
    array.push(ob2) 
    array.push(ob3) 

    var array2 = array //slice() will not work here 

    array[1].num = 1111 //change made to first array NOT intended for second 


    for(var i = 0; i < array.length; i++){ 
     console.log(array2[i].num) //print out from second array still shows changes to first... 
    } 
} 

Antwort

1

Sie können etwas tun:

var copyOfValues = listOfValues.map(function (value) { 
    return $.extend({}, value); 
}); 
+2

Ich denke, da sie nicht jQuery erwähnen, sollten Sie 'zurückkehren Object.assign ({}, Wert)' statt, ansonsten ist dies die richtige Antwort ('map') –

+0

Hallo @RobM. yeah du hast Recht, und übrigens wusste ich nichts über Object.assign ({}, value), danke =) –

0

Sind Sie sicher, array.slice (0) wird nicht funktionieren? Wenn nicht versuchen Sie dies:

var array2 = JSON.parse(JSON.stringify(array)); 
+0

Hi versuchte splice() bevor ich nicht an Objekten arbeite. Die JSON-Zeile gibt Typfehler ... – LeeH