Deep copying objects in Angular
Solution 1:
You can also use:
JSON.parse(JSON.stringify(Object))
if it's on your scope, it's in every Angular component, directive, etc. and it's also on every node environment.
Unless you have a circular reference, it should work and will effectively dissociate your variable reference to the original object.
Solution 2:
This question isn't a duplicate of How can I use angular.copy in angular 2 because the OP is asking about deep copying objects. The linked answer recommends Object.assign() which doesn't make a deep copy.
Actually, using Angular2 doesn't restrict you from using other libraries like jQuery for deep copying objects with their $.clone() function or lodash with _.cloneDeep().
The most common libraries have their typings available via typings CLI tools so even when transpiling from TypeScript you can seamlessly use anything you want.
Also see: What is the most efficient way to deep clone an object in JavaScript?
Solution 3:
Another option is to implement your own function:
/**
* Returns a deep copy of the object
*/
public static deepCopy(oldObj: any) {
var newObj = oldObj;
if (oldObj && typeof oldObj === "object") {
if (oldObj instanceof Date) {
return new Date(oldObj.getTime());
}
newObj = Object.prototype.toString.call(oldObj) === "[object Array]" ? [] : {};
for (var i in oldObj) {
newObj[i] = this.deepCopy(oldObj[i]);
}
}
return newObj;
}