使用深度优先遍历,写一个js深拷贝函数
以下是一个使用深度优先遍历实现的JS深拷贝函数:
function deepCopy(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }
  
  const newObj = Array.isArray(obj) ? [] : {};
  
  for (let key in obj) {
    newObj[key] = deepCopy(obj[key]);
  }
  
  return newObj;
}
该函数首先检查传入的参数是否为null或非对象,如果是则直接返回该值。如果参数是一个数组,则创建一个新的空数组;如果是一个对象,则创建一个新的空对象。
然后使用for...in循环遍历对象的每个属性,并递归调用deepCopy函数来复制每个属性的值。这样就可以递归地复制整个对象,包括其嵌套的属性和数组。最后返回新对象即可。
需要注意的是,该函数无法处理循环引用的情况,即对象中某个属性指向了该对象本身或其祖先对象。如果复制的对象中存在循环引用,该函数将进入死循环。
原文地址: https://www.cveoy.top/t/topic/yw2 著作权归作者所有。请勿转载和采集!