Implement a deep clone function in JavaScript

MediumTechnical
NetflixSenior UI Engineer
178

Write a function that creates a deep copy of a JavaScript object. Handle nested objects, arrays, and edge cases like circular references.

1 Answer

156
Top Answer

Simple Solution (no circular refs)

function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }

  if (Array.isArray(obj)) {
    return obj.map(item => deepClone(item));
  }

  const cloned = {};
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      cloned[key] = deepClone(obj[key]);
    }
  }
  return cloned;
}

With Circular Reference Handling

function deepClone(obj, seen = new WeakMap()) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }

  // Handle circular references
  if (seen.has(obj)) {
    return seen.get(obj);
  }

  const cloned = Array.isArray(obj) ? [] : {};
  seen.set(obj, cloned);

  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      cloned[key] = deepClone(obj[key], seen);
    }
  }
  return cloned;
}

Quick Alternative

structuredClone(obj) - built-in, handles circular refs!

DeepCopyGuru

Share Your Answer

Help others by sharing your knowledge and experience with this question.

Coming soon...

Related Questions

View all

More from Netflix

View all