angular2:如何将对象复制到另一个对象中

Swe*_*tha 51 typescript angular

请帮助我使用角度2将对象复制到另一个对象?

在角度我使用angular.copy()将对象复制到旧对象的松散引用.但是,当我使用相同的角度2得到以下错误:

错误:未定义角度.

Mik*_*kki 115

Angular2是在TypeScript和ES6等现代技术的基础上发展起来的.所以你可以做到let copy = Object.assign({}, myObject).

对象分配 - 很好的例子.

对于嵌套对象: let copy = JSON.parse(JSON.stringify(myObject))

  • 这不适用于嵌套对象.我们如何深度复制嵌套对象? (4认同)
  • 这将通过引用复制对象。如果我确实希望通过引用进行复制,以免myObject中的任何更改影响“复制”对象,该怎么办。 (2认同)

Ank*_*nka 35

let copy = Object.assign({}, myObject).  as mentioned above
Run Code Online (Sandbox Code Playgroud)

但这不适用于嵌套对象.所以另一种选择

let copy =JSON.parse(JSON.stringify(myObject))
Run Code Online (Sandbox Code Playgroud)


Kab*_*bb5 7

您可以使用spread运算符在Angular中使用ECMAScript6执行此操作:

let copy = {...myObject};
Run Code Online (Sandbox Code Playgroud)

  • 拒绝投票,因为副本将保留对旧对象的引用。 (4认同)

raj*_*mar 5

let course = {
  name: 'Angular',
};

let newCourse= Object.assign({}, course);

newCourse.name= 'React';

console.log(course.name); // writes Angular
console.log(newCourse.name); // writes React
Run Code Online (Sandbox Code Playgroud)

对于嵌套对象,我们可以使用第三方库来深度复制对象。如果是 lodash,请使用 _.cloneDeep()

let newCourse= _.cloneDeep(course);
Run Code Online (Sandbox Code Playgroud)


Bog*_*anC 5

如前所述,使用lodash的cloneDeep方法深复制内部具有嵌套对象的对象的简单方法。

对于Angular,您可以这样操作:

使用yarn add lodash或安装lodash npm install lodash

在您的组件中,导入cloneDeep并使用它:

import * as cloneDeep from 'lodash/cloneDeep';
...
clonedObject = cloneDeep(originalObject);
Run Code Online (Sandbox Code Playgroud)

它仅增加了18kb,值得物有所值。

如果您需要更多关于为何使用lodash的cloneDeep的见解,我也在这里写了一篇文章