'angular2: how to copy object into another object
Please help me in order to copy the object into another object using angular 2?
In angular, I used angular.copy() to copy objects to the loose reference of the old objects. But, when I used the same in angular 2 getting below error:
Error: angular is not defined.
Solution 1:[1]
let copy = Object.assign({}, myObject). as mentioned above
but this wont work for nested objects. So an alternative would be
let copy =JSON.parse(JSON.stringify(myObject))
Solution 2:[2]
As suggested before, the clean way of deep copying objects having nested objects inside is by using lodash's cloneDeep method.
For Angular, you can do it like this:
Install lodash with yarn add lodash or npm install lodash.
In your component, import cloneDeep and use it:
import * as cloneDeep from 'lodash/cloneDeep';
...
clonedObject = cloneDeep(originalObject);
It's only 18kb added to your build, well worth for the benefits.
I've also written an article here, if you need more insight on why using lodash's cloneDeep.
Solution 3:[3]
You can do in this in Angular with ECMAScript6 by using the spread operator:
let copy = {...myObject};
Solution 4:[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
For Nested Object we can use of 3rd party libraries, for deep copying objects. In case of lodash, use _.cloneDeep()
let newCourse= _.cloneDeep(course);
Solution 5:[5]
Try this.
Copy an Array :
const myCopiedArray = Object.assign([], myArray);
Copy an object :
const myCopiedObject = Object.assign({}, myObject);
Solution 6:[6]
Loadsh is the universal standard library for coping any object deepcopy. It's a recursive algorithm. It's check everything and does copy for the given object. Writing this kind of algorithm will take longer time. It's better to leverage the same.
Solution 7:[7]
Object.assign will only work in single level of object reference.
To do a copy in any depth use as below:
let x = {'a':'a','b':{'c':'c'}};
let y = JSON.parse(JSON.stringify(x));
If want to use any library instead then go with the loadash.js library.
Solution 8:[8]
thank you Saif from above. I tried his suggestion and it worked like a charm after I tried for three days to get my code to work.
this.sElectionFinal.subscribe((election) => {
const electionCopy = Object.assign({},election)
this.electionsFinal.push(electionCopy)})
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | BogdanC |
| Solution 3 | Kabb5 |
| Solution 4 | rajesh kumar |
| Solution 5 | Saif |
| Solution 6 | Surajit Das |
| Solution 7 | Mike Poole |
| Solution 8 | Denis Alarie 4RP |
