深拷贝函数的实现可以参考以下代码:

function deepClone(obj) {
  let clonedObj;
  
  // 判断数据类型
  if (obj instanceof Set) {
    clonedObj = new Set();
    
    obj.forEach(value => {
      clonedObj.add(deepClone(value));
    });
  } else if (obj instanceof Map) {
    clonedObj = new Map();
    
    obj.forEach((value, key) => {
      clonedObj.set(deepClone(key), deepClone(value));
    });
  } else if (typeof obj === 'object' && obj !== null) {
    clonedObj = Array.isArray(obj) ? [] : {};
    
    Object.keys(obj).forEach(key => {
      clonedObj[key] = deepClone(obj[key]);
    });
  } else {
    clonedObj = obj;
  }
  
  return clonedObj;
}

该函数首先判断传入的参数的数据类型,如果是Set或者Map类型,则遍历其中的元素进行深拷贝;如果是对象或者数组,则递归地处理对象或者数组中的每个元素,并将其赋值给新对象或者新数组中;如果是基本数据类型,则直接返回该值。这样就可以兼容各种数据类型,并实现了完备的深拷贝功能。

使用深度优先遍历,写一个功能完备的js深拷贝函数,兼容Set和Map类型

原文地址: https://www.cveoy.top/t/topic/yyf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录