Recursively deep copy a nested level object

<!-- 用递归的方式实现一个对象深拷贝 
    递归:在函数内部调用自身
-->
<script>
    //即将被深拷贝的对象
    var oldObj = {
        id: 1,
        name: 'cyx',
        inObj: {
            tel:12345,
            wechat: 'hello123445'
        },
        hobby: ['sing', 'dance', 'sports']
    };
    //声明一个空对象保存深拷贝的对象
    var newObj = {};
    //用递归的方式开始拷贝
    function Copy(target, source) {
        for (var k in source) {
            // 获取属性值
            var item = source[k];
            // 判断,数据类型为复杂数据类型Array和Object时,进行递归复制,为简单数据类型时才能进行直接赋值拷贝。
            // 由于Array也属于Object,因此判断时应先判断是否为Array类型再判断是否为Object类型。
            if (item instanceof Array) {
                target[k] = [];
                Copy(target[k], item);
            } else if (item instanceof Object) {
                target[k] = {};
                Copy(target[k], item);
            } else {
                target[k] = item;
            }
        }
    }
    Copy(newObj, oldObj);
    console.log(newObj);
    // 修改newObj属性
    newObj.inObj.tel = '10000';
    console.log(oldObj);

</script>

Guess you like

Origin blog.csdn.net/weixin_48235660/article/details/123780532