试图通过值而不是引用来复制对象数组

时间:2016-08-05 17:53:15

标签: javascript arrays qml

嗨我知道这个主题已经在之前的帖子中有所涉及,但我仍然没有得到我需要的结果。我试图做一个对象数组的副本,这些副本将是它自己的原始版本,并且在进行更改时不会影响彼此的数据。到目前为止,当我使用slice()而不是对象的向量时,复制一个int数组工作正常。在另一篇文章中提到,对象向量上的slice()仍然会引用对象,所以有没有办法按值只做???感谢。

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...
    }
}

2 个答案:

答案 0 :(得分:1)

您可以这样做:

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

答案 1 :(得分:0)

你确定array.slice(0)不能正常工作吗?如果没有试试这个:

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