Assign array of object content to a new array
本问题已经有最佳答案,请猛点这里访问。
我试图将一个对象数组分配给另一个数组,但当我创建新数组时,在其他函数中,我更改了它的值,原始数组也会更改(这不正常)。我可以换一种方式吗?例如:http://codepen.io/xiwi/pen/rlmbyp
看起来您需要复制/克隆数组,这样它就不会被引用更改。
如果数组中只有基元类型,则可以这样做:
1 | var test3 = JSON.parse(JSON.stringify(test2)); |
否则,您需要一个递归的解决方案,并在您的问题中更加具体。
例子:
1 2 3 4 5 6 7 8 9 | 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"} |
使用简单的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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]); |
对象本质上是引用。必须创建一个新对象并分配另一个对象的值:
1 | var test3 = [ Object.assign({}, test2[0]) ]; |