前端面试必会 递归 深拷贝 手写

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8">

        <title></title>

    </head>

    <body>

        <script>

            // js 拷贝一个对象

            // 深拷贝,目标对象与源对象相互之间切断联系

            var  obj1 = {name:"mumu",age:18,friend:["小红","小绿",{name:"小蓝",job:"teacher"}],say(){alert("你好我是"+this.name)}};

             // 如果是数组需要递归,如果是对象需要递归,如果是值类型递归结束

             function deepCopy(obj){

                 if(typeof obj=="object"&&obj!=null){

                     // 引用类型

                     var temp = null;

                     // 如果是数组

                     if(obj instanceof Array){

                         // 要返回的结果应该是个数组

                        temp = [];

                        // 递归拷贝数组

                        for(var i=0;i<obj.length;i++){

                            // temp[i] = obj[i]  // x这样就是普通浅拷贝

                            temp[i] = deepCopy(obj[i]); // 递归拷贝

                            // 函数自己调用自己 返回的 拷贝obj[i]的结果

                        }

                     }else{

                         // 返回的结果就是对象

                         temp = {};

                        // 递归拷贝对象

                        for(var k in obj){

                            temp[k] = deepCopy(obj[k]);

                        }

                     }

                     // 返回结果

                     return temp;

                 }else{

                     // 非引用类型或者其他

                     return obj;

                 }

             }

             var obj2 = deepCopy(obj1);

           

        </script>

    </body>

</html>

猜你喜欢

转载自blog.csdn.net/lyinshaofeng/article/details/127911054