将'对象'的atrribute复制到一个新变量

时间:2018-04-27 07:59:58

标签: javascript node.js

我想创建一个与现有对象无关但最初与对象具有相同值的变量。这意味着,如果我更改新对象,它将不会影响旧值。

我尝试使用Object.assign({},oldObj),但如果我将值推送到对象中的数组项,它就不起作用。这是我的代码:

let oldObj = {X:10, Y:[]};
let newObj = Object.assign({},oldObj);
newObj.Y.push(3.29231994);
console.log(oldObj);

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:2)

您可以在该旧对象上使用JSON.parse(JSON.stringify())来获取该副本的新副本,而无需任何参考:



let oldObj = {X:10, Y:[]};
let newObj = JSON.parse(JSON.stringify(oldObj));
newObj.Y.push(3.29231994);
console.log(oldObj);




  

如果您想要浅拷贝,请使用Object.assign({},a)

     

" deep"复制,使用JSON.parse(JSON.stringify(a))

答案 1 :(得分:1)



let oldObj = {X:10, Y:[]};
let newObj = JSON.parse(JSON.stringify(oldObj));
newObj.Y.push(3.29231994);
console.log(oldObj);




答案 2 :(得分:1)

您可以创建自己的deep复制功能。



let oldObj = {X:10, Y:[]};
let newObj = copy(oldObj);
newObj.Y.push(3.29231994);
console.log(oldObj);

function copy(o) {
   var output, v, key;
   output = Array.isArray(o) ? [] : {};
   for (key in o) {
       v = o[key];
       output[key] = (typeof v === "object") ? copy(v) : v;
   }
   return output;
}




建议不要使用JSON.parse(JSON.stringify())方法,因为将此方法用于deep-copy对象的最大问题是对象必须JSON 可序列化

答案 3 :(得分:0)

引用非基元的任何变量(或属性)实际上都是引用内存位置。因此,Arrays只是一种特殊类型的Object,它可以像其他对象一样有效地传递值。

如果要复制非基元,则必须执行复制 - Object.assign只能生成副本。< / p>