深拷贝的实现javascript

深拷贝,思想:循环key值,判断是不是基本数据类型,是,就直接拷贝,不是,递归调用deepCopy方法继续拷贝。直到所有的key均遍历完成,拷贝完成。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script>
			  function deepCopy(obj){
    
    
			  				  let target =Array.isArray(obj)?[]:{
    
    }; 
			  				  //判断 obj是对象还是数组,创建对应的
			  				  if(obj && typeof obj === 'object'){
    
    
			  				      for(let key in obj){
    
    
			  				          if(obj.hasOwnProperty(key)){
    
    
			  				              if(obj[key]&&typeof obj[key]==='object'){
    
    
											  target[key]=Array.isArray(obj[key])?[]:{
    
    }; 
			  				                  target[key]=deepCopy(obj[key]);
			  				              }else{
    
    
			  				                  target[key]=obj[key];
			  				              }
			  				          }
			  				      }
			  				  }
			  				  return target;    
			   } 
			
			  const obj1 = {
    
     a : 1, b : 2, newobj: {
    
     a: 1 }}
			  const obj2 = deepCopy(obj1)
			  obj1.newobj.a = 2;
			  console.log(obj1); // { a : 1, b : 2, newobj: { a: 2 }}
			  console.log(obj2); // { a : 1, b : 2, newobj: { a: 1 }}

		</script>
	</head>
	<body>
	</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_41117240/article/details/102603387