首页 > 其他 > 详细

递归实现深拷贝

时间:2021-04-22 15:48:39      阅读:13      评论:0      收藏:0      [点我收藏+]
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var obj = { //原数据,包含字符串、对象、函数、数组等不同的类型
            name: "test",
            main: {
                a: 1,
                b: 2
            },
            fn: function () {

            },
            friends: [1, 2, 3, [22, 33]]
        }

        function copy(obj) {
            let newobj = null; //声明一个变量用来储存拷贝之后的内容

            //判断数据类型是否是复杂类型,如果是则调用自己,再次循环,如果不是,直接赋值即可,
            //由于null不可以循环但类型又是object,所以这个需要对null进行判断
            if (typeof (obj) == ‘object‘ && obj !== null) {

                //声明一个变量用以储存拷贝出来的值,根据参数的具体数据类型声明不同的类型来储存
                newobj = obj instanceof Array ? [] : {};

                //循环obj 中的每一项,如果里面还有复杂数据类型,则直接利用递归再次调用copy函数
                for (var i in obj) {
                    newobj[i] = copy(obj[i])
                }
            } else {
                newobj = obj
            }
            return newobj; //函数必须有返回值,否则结构为undefined
        }

        var obj2 = copy(obj)
        /* obj2.name = ‘修改成功‘
        obj2.main.a = 100 */
        console.log(obj, obj2)
    </script>
</body>

</html>

递归实现深拷贝

原文:https://www.cnblogs.com/Sir-Chu/p/14688602.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!