请帮助我使用角度2将对象复制到另一个对象?
在角度我使用angular.copy()将对象复制到旧对象的松散引用。但是,当我在角度2中使用相同的误差时:
错误:未定义角度。
答案 0 :(得分:85)
<强>解决方案强>
Angular2是在TypeScript和ES6等现代技术的基础上发展起来的。所以你可以let copy = Object.assign({}, myObject)
。
Object assign - 很好的例子。
对于嵌套对象:
let copy = JSON.parse(JSON.stringify(myObject))
答案 1 :(得分:24)
let copy = Object.assign({}, myObject). as mentioned above
但这不适用于嵌套对象。另一种选择是
let copy =JSON.parse(JSON.stringify(myObject))
答案 2 :(得分:6)
您可以使用Spread运算符在Angular中使用ECMAScript6做到这一点:
let copy = {...myObject};
答案 3 :(得分:4)
如前所述,深层复制具有嵌套对象的对象的方法是使用lodash的cloneDeep方法。
对于Angular,你可以这样做:
使用npm install lodash
或cloneDeep
安装lodash。
在您的组件中,导入import * as cloneDeep from 'lodash/cloneDeep';
...
clonedObject = cloneDeep(originalObject);
并使用它:
GOARCH
它只为您的构建添加了18kb,非常值得获益。
如果您需要更多地了解使用lodash的cloneDeep的原因,我还写了article here。
答案 4 :(得分:2)
let course = {
name: 'Angular',
};
let newCourse= Object.assign({}, course);
newCourse.name= 'React';
console.log(course.name); // writes Angular
console.log(newCourse.name); // writes React
对于嵌套对象,我们可以使用第三方库来进行深层复制对象。 如果是lodash,请使用_.cloneDeep()
let newCourse= _.cloneDeep(course);
答案 5 :(得分:1)
尝试一下。
复制数组:
const myCopiedArray = Object.assign([], myArray);
复制对象:
const myCopiedObject = Object.assign({}, myObject);
答案 6 :(得分:0)
Loadsh是用于处理任何对象深度复制的通用标准库。这是一个递归算法。它检查所有内容并为给定对象复制。编写这种算法将花费更长的时间。最好利用相同的东西。
答案 7 :(得分:0)
Object.assign仅在单个级别的对象引用中起作用。
要进行任何深度的复制,请按以下步骤使用:
let x = {'a':'a','b':{'c':'c'}};
let y = JSON.parse(JSON.stringify(x));
如果要使用任何库,请使用loadash.js
库。