Here we are considering only shallow copy of objects. We are not considering deep cloning of objects. Following are the common ways of cloning object in JavaScript:
1. Object.assign() method
The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object.
const source = {key1:1, key2:'Hello World'}
const const target={};
const clone = Object.assign(target, source);
console.log(source);
console.log(target);
console.log(clone);
Output
{key1: 1, key2: "Hello World"}
{key1: 1, key2: "Hello World"}
{key1: 1, key2: "Hello World"}
2. Spread Operator
It adds spread properties to object literals. It copies own enumerable properties from a provided object onto a new object. Note that Object.assign() triggers setters whereas spread syntax doesn’t.
var obj1 = {key1:1, key2:'Hello World'};
var clone = {...obj1};
console.log(clone);
Output
{key1: 1, key2: "Hello World"}
3. JSON stringify/parse
let clone = JSON.parse(JSON.stringify(objectToClone));
Note that JSON method will loose any Javascript types that have no equivalent in JSON. For example:
JSON.parse(JSON.stringify({a:null,b:NaN,c:Infinity,d:undefined,e:function(){},f:Number,g:false})) will generate {a: null, b: null, c: null, g: false}
Example:
var clone = JSON.parse(JSON.stringify({key1:1, key2: 'Hello World'}));
console.log(clone);
Output
{key1: 1, key2: "Hello World"}
4. Manually iterating properties of objects
You can write a function to iterate properties of an object and create a clone manually. Following is a basic function to create a function using this approach:
function fun(obj) {
let cloneObject = {};
for (let prop in obj) {
if (obj.hasOwnProperty(prop)) {
cloneObject[prop] = obj[prop];
}
}
return cloneObject;
}
