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

时间:2016-09-15 08:42:32

标签: angular typescript

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

在角度我使用angular.copy()将对象复制到旧对象的松散引用。但是,当我在角度2中使用相同的误差时:

  

错误:未定义角度。

8 个答案:

答案 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 lodashcloneDeep安装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库。