AngularJS has angular.copy() to deep copy objects and arrays.
Does Angular also have something like that?
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.
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;
}
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?