How to copy reference type?

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.

Guess you like

Origin blog.csdn.net/m0_57236802/article/details/133020847