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


Answers:


158

Angular2是在TypeScript和ES6等现代技术的基础上开发的。

所以你可以做let copy = Object.assign({}, myObject)

对象分配-很好的例子。

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


4
这不适用于嵌套对象。我们如何深度复制嵌套对象?
Pratap AK

2
这将通过引用复制对象。如果我确实希望通过引用进行复制,以免myObject中的任何更改影响“复制”对象,该怎么办?
Manoj Amalraj

@ PratapA.K如果可以在系统中加载另一个库,请看看loadsh。它具有_cloneDeep之类的功能。
PeterS

“对象”仅指类型,但在此处用作名称空间。ts(2702)
Omid Farvid

50
let copy = Object.assign({}, myObject).  as mentioned above

但这不适用于嵌套对象。所以一个替代方案是

let copy =JSON.parse(JSON.stringify(myObject))

1
嵌套对象在那里时为我工作,谢谢
Swift

10

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

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

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

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

import * as cloneDeep from 'lodash/cloneDeep';
...
clonedObject = cloneDeep(originalObject);

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

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


这对我行得通!谢谢:)令人难以置信的是,高级编程语言无法在没有参考的情况下处理“副本” ...
NEBUC

9

您可以使用Spread运算符在Angular中使用ECMAScript6做到这一点:

let copy = {...myObject};

6
拒绝投票,因为副本将保留对旧对象的引用。
CrazySabbath

4
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);

2

尝试这个。

复制一个数组:

const myCopiedArray  = Object.assign([], myArray);

复制对象:

const myCopiedObject = Object.assign({}, myObject);

1

Loadsh是用于处理任何对象深层复制的通用标准库。这是一个递归算法。它检查所有内容并为给定对象复制。编写这种算法将花费更长的时间。最好利用相同的东西。


0

Object.assign将仅在单一级别的对象引用中工作。

要进行任何深度的复制,请按以下方式使用:

let x = {'a':'a','b':{'c':'c'}};
let y = JSON.parse(JSON.stringify(x));

如果要使用任何库而不是loadash.js库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.