Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deep copy an array in Angular 2 + TypeScript

I have an array of objects that is an input. Lets call it content.

When trying to deep copy it, it still has a reference to the previous array.

I need to duplicate that input array, and change one property of the duplicated part.

So long I've tried different methods that weren't successful.

ES6 way:

public duplicateArray() {   arr = [...this.content]   arr.map((x) => {x.status = DEFAULT});   return this.content.concat(arr); } 

The slice way:

public duplicateArray() {   arr = this.content.slice(0);   arr.map((x) => {x.status = DEFAULT});   return this.content.concat(arr); } 

In both of them all the objects inside the array have status: 'Default'.

What's the best approach to deep copy the array in Angular 2?

like image 698
Joel Almeida Avatar asked Feb 19 '16 11:02

Joel Almeida


People also ask

Is Angular copy a deep copy?

Explanation : = represents a reference whereas angular. copy() creates a new object as a deep copy. Using = would mean that changing a property of response.


2 Answers

Check this:

  let cloned = source.map(x => Object.assign({}, x)); 
like image 59
YD1m Avatar answered Oct 11 '22 17:10

YD1m


Simple:

let objCopy  = JSON.parse(JSON.stringify(obj)); 

This Also Works (Only for Arrays)

let objCopy2 = obj.slice() 
like image 40
Cameron Gilbert Avatar answered Oct 11 '22 15:10

Cameron Gilbert