My GitHub
has multiple ways of copying reference types like objects and arrays, here are some common ones:
Shallow Copy
1. Object.assign()
const originalObject = {
a: 1, b: 2 };
const copiedObject = Object.assign({
}, originalObject);
2. Array.slice()
For arrays:
const originalArray = [1, 2, 3];
const copiedArray = originalArray.slice();
3. Spread Operator
const originalObject = {
a: 1, b: 2 };
const copiedObject = {
...originalObject };
const originalArray = [1, 2, 3];
const copiedArray = [...originalArray];
Deep Copy
1. JSON method
This is a simple but limited approach. It cannot copy functions and circular references.
const originalObject = {
a: 1, b: {
c: 2 } };
const copiedObject = JSON.parse(JSON.stringify(originalObject));
2. Recursive copy
You can write a recursive function to do a deep copy.
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
const copy = Array.isArray(obj) ? [] : {
};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key] = deepCopy(obj[key]);
}
}
return copy;
}
const originalObject = {
a: 1, b: {
c: 2 } };
const copiedObject = deepCopy(originalObject);
3. Use third-party libraries
Some third-party libraries (such as lodash's _.cloneDeep()
method) also provide deep copy functions.
const _ = require('lodash');
const originalObject = {
a: 1, b: {
c: 2 } };
const copiedObject = _.cloneDeep(originalObject);
Which method you choose depends on your specific needs and the complexity of your object.